gpt4 book ai didi

android - 如何将帧动画添加到包含按钮状态更改处理的 ImageButton?

转载 作者:行者123 更新时间:2023-11-30 00:47:07 28 4
gpt4 key购买 nike

我想将动画列表添加到一个选择器 xml 文件中,该文件又被添加到一个 ImageButton 中。在默认状态下,我希望播放动画,在按下状态下,我希望显示其他图像。我的代码适用于按钮状态更改,但动画在默认状态下不起作用。其实我在读Android

anim_virus.xml:

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="false">
<item android:drawable="@drawable/attackvirus0" android:duration="50" />
<item android:drawable="@drawable/attackvirus1" android:duration="50" />
<item android:drawable="@drawable/attackvirus2" android:duration="50" />
<item android:drawable="@drawable/attackvirus3" android:duration="50" />
<item android:drawable="@drawable/attackvirus4" android:duration="50" />
<item android:drawable="@drawable/attackvirus5" android:duration="50" />
<item android:drawable="@drawable/attackvirus4" android:duration="50" />
<item android:drawable="@drawable/attackvirus3" android:duration="50" />
<item android:drawable="@drawable/attackvirus2" android:duration="50" />
<item android:drawable="@drawable/attackvirus1" android:duration="50" />
</animation-list>

button_state_virus.xml:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:drawable="@drawable/attackviruspress"/>
<item android:state_focused="true" android:drawable="@drawable/attackvirusfocus"/>
<item android:drawable="@drawable/anim_virus" android:state_enabled="true"/>
</selector>

我的图片按钮标签及其参数是:

<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#00000000"
android:layout_margin="10dp"
android:soundEffectsEnabled="true"
android:src="@drawable/button_state_virus"
android:id="@+id/button_infect"
android:contentDescription="@string/content_desc_virus"/>

最佳答案

对于一个 drawable 背景动画你可以这样做:

ImageButton imageButton = (ImageButton) findViewById(R.id.button_infect);
imageButton.setBackgroundResource(R.drawable.anim_virus);

如果你想.start() 动画,这样做:

((AnimationDrawable) imageButton.getBackground()).start();

如果你想.stop()它,这样做:

((AnimationDrawable) imageButton.getBackground()).stop();

但是,要从您的 ImageButton 获得一个 StateListDrawable 动画,您必须将 StateListDrawable 设置为您的 android:background XML 中的属性。

StateListDrawable background = (StateListDrawable) imageButton.getBackground();
Drawable current = background.getCurrent();

if (current instanceof AnimationDrawable) {
imageButton = (AnimationDrawable) current;
btnAnimation.start();
}

因此这段代码从 ImageButton 获取背景,然后根据您所处的状态将背景定义为 drawable。如果当前状态是instanceof AnimationDrawable 即您的 animation-list 然后它将播放动画。

编辑:改自评论错误

E/AndroidRuntime: FATAL EXCEPTION: main Process: java.lang.RuntimeException: Unable to start activity ComponentInfo{AttackPlanetActivity}: java.lang.ClassCastException: android.graphics.drawable.StateListDrawable cannot be cast to android.graphics.drawable.AnimationDrawable at android.app.ActivityThread.performLaunchActivity

编辑功劳:Button states with Background as AnimationDrawable in Android

关于android - 如何将帧动画添加到包含按钮状态更改处理的 ImageButton?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41618963/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com