2011-11-10 9 views
2

私はチェックマークが付いていれば緑色に、チェックしないと赤色に点滅するように見えます。これを行うために、私はconnected_selector.xmlというセレクタを作成しました。アニメーションリストが最初にアニメ化されていません

<?xml version="1.0" encoding="utf-8"?> 
<selector 
    xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_checked="true" android:drawable="@drawable/green_button" /> 
    <item android:state_checked="false" android:drawable="@drawable/red_button_blinking" /> 
    <item android:drawable="@drawable/red_button_blinking" /> 
</selector> 

green_buttonは単にpngで、red_button_blinkingはpngのアニメーションリストです。

<?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/red_button" android:duration="500" /> 
    <item android:drawable="@drawable/red_button_lit" android:duration="500" /> 
</animation-list> 

チェックボックスの背景は@ drawable/connected_selectorに設定されています。チェックボックスが最初にチェックされていない場合は、点滅しません。@ drawable/red_buttonが表示されます。しかし、チェックボックスをオンにしてチェックを外すと、チェックボックスが正しくアニメーション表示されます。

最初にチェックボックスがオフになっているため、最初にアニメーションを開始するにはどうすればよいですか?私は、コードで手動でアニメーションを開始しようとすることができると思うが、私はそれが必要であるとは思わない。

+0

これを回避するには、onWindowFocusChangedで手動でアニメーションを開始することで作業するようにしましたが、これを行う必要はありません。 –

+0

ToggleButtonと全く同じ問題があります。すべてのユーザーの操作で正常に動作します。ただし、最初はアニメーションを開始できません。さらに、私はコードからそれを起動することさえできませんでした。その間にもう少し洞察を得ていますか? – stfn

+0

補足:ImageViewでも同じ問題 – stfn

答えて

3

さて、私はこれを回避するために醜い、汚れたハックを見つけました。私にはちょっとした手がかりがないことに注意してください。なぜ、これが起こるのでしょうか。異なるデバイスは異なる読み込み時間を持つため、おそらく一般的な方法ではありません。

onPostResume()に次の回避策を実行して、必要な遅延時間を最小限に抑えます。

if(onOffStatus) { 
    // SLEEP 0.5 SECONDS HERE ... 
    new Handler().postDelayed(new Runnable() { 
     public void run() { 
      switcher.setBackgroundResource(R.drawable.button_state_anim); 

      // Get the background, which has been compiled to an AnimationDrawable object. 
      AnimationDrawable frameAnimation = (AnimationDrawable) switcher.getBackground(); 
      // Start the animation (looped playback by default). 
      frameAnimation.start(); 
     } 
    }, 500); // Actual required time will probably be dependent on device performance 
} 

私は何か良いものが見つかるまで、これで終わりです。私がここで何か見落としてくれたら教えてください。

関連する問題