Как воспроизвести анимацию одного кадра - PullRequest
6 голосов
/ 01 сентября 2011

Я хочу сделать анимацию одним выстрелом, но иметь возможность воспроизводить ее столько раз, сколько захочу. Сейчас он играет только в первый раз.

.xml:

<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/p1_ch1" android:oneshot="true">
    <item 
      android:drawable="@drawable/p1_ch1_5" 
      android:duration="500"/>
    <item 
      android:drawable="@drawable/p1_ch1_4" 
      android:duration="1000"/>
    <item 
      android:drawable="@drawable/p1_ch1_5" 
      android:duration="500"/>
</animation-list>

.java:

public void handler_p1_ch1_5 (View target){
      ImageView iv = (ImageView)findViewById(R.id.p1_ch1_5);
      AnimationDrawable aw = (AnimationDrawable)iv.getBackground();
      aw.start();
}

Ответы [ 4 ]

15 голосов
/ 01 сентября 2011

Просто вызовите aw.stop () перед aw.start ()

1 голос
/ 06 октября 2014

Используйте это:

frameAnimation.setOneShot(true);
0 голосов
/ 12 января 2018

Если вы хотите воспроизвести одноразовую анимацию после завершения анимации, вы можете сделать так:

final AnimationDrawable animationDrawable = (AnimationDrawable) image.getDrawable();
if (!animationDrawable.isRunning()) {

    int totalFrameDuration = 0;
    for (int i = 0; i < animationDrawable.getNumberOfFrames(); i++) {
        totalFrameDuration += animationDrawable.getDuration(i);
    }

    animationDrawable.start();
    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            animationDrawable.stop();
        }
    }, duration);
}
0 голосов
/ 16 марта 2017

Изменение

android:oneShot="true" to
android:oneShot="false"
...