Android 为什么在动画之后,浮动操作按钮消失了?

Android 为什么在动画之后,浮动操作按钮消失了?,android,android-fragments,android-animation,floating-action-button,Android,Android Fragments,Android Animation,Floating Action Button,我有一个包含多个元素的片段,其中一个是晶圆厂,当我按下另一个晶圆厂时,我试图制作一个晶圆厂显示/隐藏。我已经创建了自己的动画,并在OnClickListener方法中设置了动画。 当动画结束时,问题就出现了,因为中间出现的fab会消失,所以我不能使用它,如果我在fab上强制使用show()方法,按钮会以该方法的工作方式出现,但我想使用我自己的动画,自定义比例和持续时间等 动画xml如下所示: <?xml version="1.0" encoding="utf-8"?> <set

我有一个包含多个元素的片段,其中一个是晶圆厂,当我按下另一个晶圆厂时,我试图制作一个晶圆厂显示/隐藏。我已经创建了自己的动画,并在OnClickListener方法中设置了动画。 当动画结束时,问题就出现了,因为中间出现的fab会消失,所以我不能使用它,如果我在fab上强制使用show()方法,按钮会以该方法的工作方式出现,但我想使用我自己的动画,自定义比例和持续时间等

动画xml如下所示:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <scale
        android:fromXScale="0.0"
        android:fromYScale="0.0"
        android:toXScale="0.8"
        android:toYScale="0.8"
        android:pivotX="50%"
        android:pivotY="50%"
        android:duration="300"
        android:interpolator="@android:anim/linear_interpolator">
    </scale>

    <alpha
        android:fromAlpha="0.0"
        android:toAlpha="1.0"
        android:duration="300">
    </alpha>
</set>
这是布局文件中的晶圆厂:

<com.google.android.material.floatingactionbutton.FloatingActionButton
        android:id="@+id/fab1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"
        android:layout_marginEnd="8dp"
        android:layout_marginRight="8dp"
        android:clickable="true"
        app:layout_constraintEnd_toEndOf="@+id/textView5"
        app:layout_constraintTop_toTopOf="parent"
        app:srcCompat="@drawable/erase_96px" />

我以前尝试过这种解决方案,但对于其他类型的晶圆厂,也许这很重要,过去我使用过这种方法,效果很好:

<android.support.design.widget.FloatingActionButton
        android:id="@+id/myFab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginEnd="24dp"
        android:layout_marginRight="24dp"
        android:layout_marginBottom="168dp"
        android:clickable="false"
        android:focusable="false"
        android:visibility="invisible"
        app:backgroundTint="@android:color/white"
        app:layout_anchor="@+id/ScrollViewCambio"
        app:layout_anchorGravity="right|bottom"
        app:layout_constraintBottom_toTopOf="@+id/eraseFab"
        app:layout_constraintEnd_toEndOf="@+id/eraseFab"
        app:layout_constraintStart_toStartOf="@+id/eraseFab"
        app:srcCompat="@drawable/custom25"
        android:tint="@color/colorAccent"/>

仅需要一个更改anim.setFillAfter(true)。它将保持动画的最终状态

请参考我下面的代码

    final Animation anim = AnimationUtils.loadAnimation(getContext(),R.anim.fab_open);
    fab1.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if(!isVisible){
                        fab.startAnimation(anim);
                        //this is for the button to regain clickable property, disabled by default in layout
                        anim.setFillAfter(true);    
                        fab.setClickable(true); 
                    }
                    else{
                        Toast.makeText(getContext(),"Fab already shown",Toast.LENGTH_SHORT).show();
                    }
                }
            });

谢谢,我在动画定义之后添加了setFillAfter(true),因为我的应用程序比显示的示例要复杂一点,我使用了动画好几次,但效果如预期。很好,我很高兴解决方案帮助了您:)
    final Animation anim = AnimationUtils.loadAnimation(getContext(),R.anim.fab_open);
    fab1.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if(!isVisible){
                        fab.startAnimation(anim);
                        //this is for the button to regain clickable property, disabled by default in layout
                        anim.setFillAfter(true);    
                        fab.setClickable(true); 
                    }
                    else{
                        Toast.makeText(getContext(),"Fab already shown",Toast.LENGTH_SHORT).show();
                    }
                }
            });