如何在 android 中设置动画切换按钮
how to set up an animated toggle button in android
我按照 this SO 问题中某人的方式创建了一个动画切换按钮。它工作正常但有一个小问题,当布局首次创建时,我的切换按钮背景是 animationdrawable 的第一帧(它应该是它的最后一帧)。一旦我第一次点击它,它就可以正常工作。
编辑:
toggle_pause_anim.xml:
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="true" >
<item
android:drawable="@drawable/pause1"
android:duration="50"/>
...
<item
android:drawable="@drawable/pause20"
android:duration="50"/>
</animation-list>
toggle_pause_anim.xml:
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="true" >
<item
android:drawable="@drawable/play1"
android:duration="50"/>
...
<item
android:drawable="@drawable/pause20"
android:duration="50"/>
</animation-list>
toggle_play_pause_anim.xml:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/toggle_play_anim" android:state_checked="false"/>
<item android:drawable="@drawable/toggle_pause_anim" android:state_checked="true"/>
</selector>
toggle_play_pause_bg:
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+android:id/background"
android:drawable="@android:color/transparent"/>
<item
android:id="@+android:id/toggle"
android:drawable="@drawable/toggle_play_pause_anim"/>
</layer-list>
ToggleButton
在我的 layout.xml:
<ToggleButton
android:id="@+id/play_pause"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/toggle_play_pause_bg"
android:textOff=""
android:textOn="" />
不,我确实在创建时将 checked 设置为 false。
Here 是我得到的视频。问题是布局首次加载时(图标应该是播放,而不是暂停)。如您所见,第一次更改后,它会正常工作。
请添加您的代码,但您似乎应该在 Activity 的 onCreate 方法中使用 setChecked(true) 或 setChecked(false)。
好吧,既然没人回答我就找啊找,终于找到了解决办法。
所以这是诀窍:
我的 ToggleButton layout.xml:
<ToggleButton
android:id="@+id/play_pause"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/toggle_play_pause_anim"
android:textOff=""
android:textOn="" />
事实证明图层可绘制不是必需的,在 java 代码中,我在 onCreate
方法中添加了这些行:
toggleBtn = (ToggleButton) findViewById(R.id.play_pause);
StateListDrawable stateListDrawable = (StateListDrawable) toggleBtn.getBackground();
AnimationDrawable animationDrawable = (AnimationDrawable) stateListDrawable.getCurrent();
animationDrawable.selectDrawable(animationDrawable.getNumberOfFrames() - 1);
现在加载和运行都很好。
我按照 this SO 问题中某人的方式创建了一个动画切换按钮。它工作正常但有一个小问题,当布局首次创建时,我的切换按钮背景是 animationdrawable 的第一帧(它应该是它的最后一帧)。一旦我第一次点击它,它就可以正常工作。
编辑: toggle_pause_anim.xml:
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="true" >
<item
android:drawable="@drawable/pause1"
android:duration="50"/>
...
<item
android:drawable="@drawable/pause20"
android:duration="50"/>
</animation-list>
toggle_pause_anim.xml:
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="true" >
<item
android:drawable="@drawable/play1"
android:duration="50"/>
...
<item
android:drawable="@drawable/pause20"
android:duration="50"/>
</animation-list>
toggle_play_pause_anim.xml:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/toggle_play_anim" android:state_checked="false"/>
<item android:drawable="@drawable/toggle_pause_anim" android:state_checked="true"/>
</selector>
toggle_play_pause_bg:
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+android:id/background"
android:drawable="@android:color/transparent"/>
<item
android:id="@+android:id/toggle"
android:drawable="@drawable/toggle_play_pause_anim"/>
</layer-list>
ToggleButton
在我的 layout.xml:
<ToggleButton
android:id="@+id/play_pause"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/toggle_play_pause_bg"
android:textOff=""
android:textOn="" />
不,我确实在创建时将 checked 设置为 false。
Here 是我得到的视频。问题是布局首次加载时(图标应该是播放,而不是暂停)。如您所见,第一次更改后,它会正常工作。
请添加您的代码,但您似乎应该在 Activity 的 onCreate 方法中使用 setChecked(true) 或 setChecked(false)。
好吧,既然没人回答我就找啊找,终于找到了解决办法。
所以这是诀窍:
我的 ToggleButton layout.xml:
<ToggleButton
android:id="@+id/play_pause"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/toggle_play_pause_anim"
android:textOff=""
android:textOn="" />
事实证明图层可绘制不是必需的,在 java 代码中,我在 onCreate
方法中添加了这些行:
toggleBtn = (ToggleButton) findViewById(R.id.play_pause);
StateListDrawable stateListDrawable = (StateListDrawable) toggleBtn.getBackground();
AnimationDrawable animationDrawable = (AnimationDrawable) stateListDrawable.getCurrent();
animationDrawable.selectDrawable(animationDrawable.getNumberOfFrames() - 1);
现在加载和运行都很好。