2011-11-10 97 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> 

CheckBox的背景設置爲@繪製/ 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 
} 

這不是很漂亮,但我會一直這樣做,直到我找到更好的東西。如果我在這裏忽略了某些東西,請告訴我。