如何在制表符/片段转换之间设置新的浮动操作按钮的动画?

Ind*_*yZa 7 android floating-action-button

在新的设计支持库中,我想动画浮动操作按钮(FAB),以便在更改片段或选项卡时缩小和展开.

在此输入图像描述

我试过几种过渡了一段时间,但不能得到顺利和连接的例子让我觉得有更好的办法还是要做到这一点有道.

Cho*_*hol 7

ViewPager.OnPageChangeListener()我将使用btn.setScaleY()btn.setScaleX()取决于onPageScrolled()方法的偏移量.


Hel*_*miB 6

在你Activity的类,添加addOnPageChangeListener在你的ViewPager.见下文 :

viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            private int state = 0;
            private boolean isFloatButtonHidden = false;
            private int position = 0;

            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

                if (isFloatButtonHidden == false && state == 1 && positionOffset != 0.0) {
                    isFloatButtonHidden = true;

                    //hide floating action button
                    swappingAway();
                }
            }

            @Override
            public void onPageSelected(int position) {
                //reset floating
                this.position = position;

                if (state == 2) {
                    //have end in selected tab
                    isFloatButtonHidden = false;
                    selectedTabs(position);

                }
            }

            @Override
            public void onPageScrollStateChanged(int state) {
                //state 0 = nothing happen, state 1 = begining scrolling, state 2 = stop at selected tab.
                this.state = state;
                if (state == 0) {
                    isFloatButtonHidden = false;
                } else if (state == 2 && isFloatButtonHidden) {
                    //this only happen if user is swapping but swap back to current tab (cancel to change tab)
                    selectedTabs(position);
                }

            }
        });
Run Code Online (Sandbox Code Playgroud)

在您的私有方法中,您可以在那里执行自定义任务.

private void swappingAway()
{
    floatingActionButton.clearAnimation();
    Animation animation = AnimationUtils.loadAnimation(this, R.anim.pop_down);
    floatingActionButton.startAnimation(animation);
}

private void selectedTabs(int tab)
{
    floatingActionButton.show();

    //a bit animation of popping up.
    floatingActionButton.clearAnimation();
    Animation animation = AnimationUtils.loadAnimation(this, R.anim.pop_up);
    floatingActionButton.startAnimation(animation);

    //you can do more task. for example, change color for each tabs, or custom action for each tabs.
}
Run Code Online (Sandbox Code Playgroud)

我故意不使用hide()show(),因为它有缺陷,当你换走,回去的时候了.

这是pop_down和pop_up的目标

pop_down.xml

<scale xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromXScale="1.0"
    android:fromYScale="1.0"
    android:toXScale="0.0"
    android:toYScale="0.0"
    android:duration="100"
    android:pivotX="50%"
    android:pivotY="50%"
    android:shareInterpolator="true"
    android:fillAfter="true">
</scale>
Run Code Online (Sandbox Code Playgroud)

pop_up.xml

<scale xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromXScale="0.0"
    android:fromYScale="0.0"
    android:toXScale="1.0"
    android:toYScale="1.0"
    android:duration="500"
    android:pivotX="50%"
    android:pivotY="50%"
    android:startOffset="200"
    android:interpolator="@android:anim/bounce_interpolator"
    android:shareInterpolator="true"
    android:fillAfter="true">
</scale>
Run Code Online (Sandbox Code Playgroud)