2

この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="" />

いいえ、作成時にチェックを false に設定します。

これが私が得ているもののビデオです。問題は、レイアウトが最初にロードされたときです (アイコンは一時停止ではなく、再生する必要があります)。ご覧のとおり、最初の変更後、その後は正しく機能します。

4

2 に答える 2

3

さて、誰も答えなかったので、検索して検索し、最終的に解決策を見つけました。

だからここにトリックがあります:

私の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);

これで、正常にロードおよび動作します。

于 2015-12-24T20:34:30.680 に答える
0

コードを追加してください。アクティビティの onCreate メソッドで setChecked(true) または setChecked(false) を使用する必要があるようです。

于 2015-12-23T16:23:35.093 に答える