为什么动画后浮动动作按钮消失了?

问题描述 投票:1回答:1

我有一个包含几个元素的片段,其中一个是晶圆厂,当我按下另一个晶圆厂时,我试图使一个晶圆厂显示/隐藏。我已经创建了自己的动画,并在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>

在片段onCreateView()中,我的代码如下所示:

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

这是布局文件中的晶圆厂:

<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"/>
android android-fragments android-animation floating-action-button
1个回答
0
投票

仅需要更改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();
                    }
                }
            });
© www.soinside.com 2019 - 2024. All rights reserved.