动画在 Android 中无法正常工作(仅执行一次)

Posted

技术标签:

【中文标题】动画在 Android 中无法正常工作(仅执行一次)【英文标题】:Animation not work properly (performs Only once) in Android 【发布时间】:2021-05-05 13:21:30 【问题描述】:

我正在显示动画问题。当我单击按钮以显示线性布局时,动画效果很好,当我单击按钮以关闭线性布局时,动画按我的意愿执行,但是当我第二次单击以打开线性布局时,动画对于显示布局或关闭布局都不起作用。我还想通知您,按钮单击可以正常执行。布局可见性 GONE & VISIBLE 可以正常工作,但动画第二次无法正常工作。

public class AdminViewComplaintActivity extends AppCompatActivity implements View.OnClickListener 

ImageView btn_search, btn_close_search ;
LinearLayout ll_search;
Animation animationIn, animationOut;

@Override
public void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_view_complaint);

     btn_search = findViewById(R.id.btn_search);
     btn_close_search = findViewById(R.id.btn_close_search);
     ll_search = findViewById(R.id.ll_search);


    animationIn= AnimationUtils.loadAnimation(getApplicationContext(),R.anim.view_in);
    animationOut= AnimationUtils.loadAnimation(getApplicationContext(),R.anim.view_out);


@Override
public void onClick(View view) 

    if (view==btn_search)

      

        if(ll_search.getVisibility()==View.GONE)

 // show linear layout with animation

            ll_search.setAnimation(animationIn);
            ll_search.setVisibility(View.VISIBLE);

        
    

    else if(view==btn_close_search)

// close linear layout with animation

        ll_search.setAnimation(animationOut);
        ll_search.setVisibility(View.GONE);
      
    
 

动画view_in.xml的xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"

>
<translate
    android:duration="1000"
    android:fromXDelta="100%"
    android:toXDelta="0%" />

</set>

动画view_out.xml的xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
>

<translate
    android:duration="1000"
    android:fromXDelta="0%"
    android:toXDelta="100%" />
</set>

【问题讨论】:

【参考方案1】:

将此代码添加到查看

   anim.setFillEnabled(true);
   anim.setFillAfter(true);

以编程方式使用:

 Animation animation = AnimationUtils.loadAnimation(context, android.R.anim.nameYourAnim);
            viewToAnimate.startAnimation(animation);

例如动画:

<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="-50%p" android:toXDelta="0"
        android:duration="@android:integer/config_mediumAnimTime"/>
<alpha android:fromAlpha="0.0" android:toAlpha="1.0"
        android:duration="@android:integer/config_mediumAnimTime" />

【讨论】:

仅使用 viewToAnimate.startAnimation(animation);

以上是关于动画在 Android 中无法正常工作(仅执行一次)的主要内容,如果未能解决你的问题,请参考以下文章

我想为 setVisibility 上的视图设置动画,但它仅第一次工作

动画原点无法正常工作 Monogame 3.0

Android在动态视图中仅获得一次动画效果

TextViews 在 Android 4 上仅动画一次

平移手势无法正常工作

IOS 中的动画延迟无法正常工作