fab.show()在初始化新活动后第一次没有动画

时间:2015-11-11 16:43:04

标签: android animation android-activity android-design-library androiddesignsupport

我正在使用com.android.support:design:23.1.0库中的浮动操作按钮(fab)组件来生成我的应用程序的工厂。

但是我第一次使用fab.hide()加载一个新活动并尝试在点击一个按钮后通过fab.show()显示图标时,没有动画制作工厂。这仅在加载新活动后第一次发生。当我多次尝试隐藏并显示按钮时,它会正常动画。

这是什么问题?在活动加载后立即对其进行动画制作也很有魅力。

Java in activity:

    fabSend = (FloatingActionButton) findViewById(R.id.fabSend);
    fabSend.hide();    


CompoundButton.OnCheckedChangeListener changeChecker = new CompoundButton.OnCheckedChangeListener() {

    @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        if (isChecked){
//                FAB on
                fabSend.show();
            }   else {
//                FAB off
                fabSend.hide();
            }
        }
    };

Layout.xml

            <android.support.design.widget.FloatingActionButton
                android:id="@+id/fabSend"
                app:borderWidth="0dp"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="end"
                android:layout_alignParentBottom="true"
                android:layout_marginRight="@dimen/fab_margin"
                android:layout_marginBottom="54dp"
                android:src="@drawable/ic_check_white_24dp" />

4 个答案:

答案 0 :(得分:37)

我遇到了同样的问题。在我的fab xml中我有visibility="gone",而不是我试图通过fab.show()从代码中显示fab - 并且动画第一次没有工作。我已将xml更改为visibility="invisible",问题解决了。

答案 1 :(得分:6)

终于解决了这个问题。我设计了一个新类来延迟处理揭示动画。抓住它,初始化它,你很高兴。我发现了与标准fab.show()相似的动画,延迟50ms。

    public static void showFabWithAnimation(final FloatingActionButton fab, final int delay) {
    fab.setVisibility(View.INVISIBLE);
    fab.setScaleX(0.0F);
    fab.setScaleY(0.0F);
    fab.setAlpha(0.0F);
    fab.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
        @Override
        public boolean onPreDraw() {
            fab.getViewTreeObserver().removeOnPreDrawListener(this);
            fab.postDelayed(new Runnable() {
                @Override
                public void run() {
                    fab.show();
                }
            }, delay);
            return true;
        }
    });
}

答案 2 :(得分:0)

根据文件:

  

android.support.design.widget.FloatingActionButton

     

public void show()

     

显示按钮。如果是,则此方法将为按钮显示设置动画   视图已经布局

所以,要在第一次创建自己的动画时制作动画,以便在当前未布置时为其设置动画

{{1}}

答案 3 :(得分:0)

实现此目标的最佳方法是简单地将Fab的scaleX和scaleY设置为XML中的零。这是最简单的方法,还可以使您的应用程序代码整洁。

<android.support.design.widget.FloatingActionButton
    android:id="@+id/fab"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"

    android:scaleX="0"
    android:scaleY="0"
    android:visibility="invisible"/>