我想知道如何正确处理动画。下面的代码工作正常,但动画仅在第一次单击时启动。首次点击后它不再起作用。
布局:
<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次)点击时开始。
每次点击按钮时如何启动动画?
答案 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();