3

我想知道如何正确处理动画。下面的代码工作正常,但动画仅在第一次点击时开始。第一次单击后它不再起作用。

布局:

<Button
    android:id="@+id/play"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:layout_alignParentTop="true"
    android:background="@drawable/speaker" />

动画文件“anim.xml”:

<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="true" >
<item
android:drawable="@drawable/choose12"
android:duration="100"/>
<item
android:drawable="@drawable/choose12_1"
android:duration="100"/>
<item
android:drawable="@drawable/choose12_2"
android:duration="100"/>
<item
android:drawable="@drawable/choose12"
android:duration="100"/>
</animation-list>

活动:

final Button speakButton = (Button)findViewById(R.id.play);
    speakButton.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            String words = getResources().getString(R.string.select_age);
            speakWords(words);
            speakButton.setBackgroundResource(R.drawable.anim.xml);
            AnimationDrawable AppNameAnimation = (AnimationDrawable) speakButton.getBackground();
            AppNameAnimation.start();
        }
    });

在上面的代码中,动画仅适用于第一次单击,但不会在第二次(或第三次或第 N 次)单击时开始。

每次单击按钮时如何启动动画?

4

2 回答 2

2

我有一个类似的问题。

如果我已经播放过动画,我先在动画上调用停止来修复它

           mAnimationDrawable.stop();
           mImageView.setImageDrawable(mAnimationDrawable);
           mAnimationDrawable.start();
于 2014-06-21T21:27:49.900 回答
1

尝试以下方式...也许是因为您已经BackgroundResourceR.drawable.anim.xml. 因此,编译器再次无法编译此行。我认为AnimationDrawable不会从相同的资源开始。如果你动态改变它,你可以得到它。

final Button speakButton = (Button)findViewById(R.id.play);
    speakButton.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            String words = getResources().getString(R.string.select_age);
            speakWords(words);
            speakButton.setBackgroundResource(R.drawable.anim.xml);
            AnimationDrawable AppNameAnimation = (AnimationDrawable) speakButton.getBackground();
            AppNameAnimation.start();

            speakButton.post(new Runnable() {

               @Override
               public void run() {

                  if(AppNameAnimation.getCurrent() != AppNameAnimation.getFrame(AppNameAnimation.getNumberOfFrames() - 1))
                  {
                     speakButton.post(this);
                  }else
                  {
                     speakButton.removeCallbacks(this);
                     speakButton.setBackgroundResource(R.drawable.speaker);
                  }

               }
            });
        }
    });
于 2013-06-26T07:14:41.063 回答