动画仅在第一次按钮点击时起作用

时间:2013-06-26 07:03:49

标签: android android-animation

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

布局:

<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次)点击时开始。

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

2 个答案:

答案 0 :(得分:1)

请尝试以下方式......可能是因为您已将BackgroundResource设置为R.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);
                  }

               }
            });
        }
    });

我希望这会对你有所帮助。

答案 1 :(得分:1)

我遇到了类似的问题。

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

           mAnimationDrawable.stop();
           mImageView.setImageDrawable(mAnimationDrawable);
           mAnimationDrawable.start();