我試圖連續動畫4個圖像,當我收到發送廣播意圖的新GCM消息時切換動畫。我將顯示前兩個代碼,以及出錯的地方。基本上這兩個命令之間(情況0與情況1),我需要能夠停止第一個runnable,然後開始第二個。我試圖通過設置在Android中處理多個Runnables()
isRunning = false;
但這不起作用。我在想,如果我繼續黑客攻擊,我可能會得到這個權利,但我想知道正確的方法是什麼。
public void startAnimatedBackground(Integer num) {
isRunning = false;
ImageSwitcher imageSwitcher = null;
aniIn = AnimationUtils.loadAnimation(this,
android.R.anim.fade_in);
aniOut = AnimationUtils.loadAnimation(this,
android.R.anim.fade_out);
aniIn.setDuration(500);
aniOut.setDuration(500);
switch (num) {
case 0:
imageSwitcher = (ImageSwitcher) findViewById(R.id.switcher_accept);
break;
case 1:
imageSwitcher = (ImageSwitcher) findViewById(R.id.switcher_on_way);
break;
default:
break;
}
imageSwitcher.setInAnimation(aniIn);
imageSwitcher.setOutAnimation(aniOut);
imageSwitcher.setFactory(this);
imageSwitcher.setImageResource(images[0]);
isRunning = true;
final Handler handler = new Handler();
final ImageSwitcher finalImageSwitcher = imageSwitcher;
Runnable runnable = new Runnable() {
@Override
public void run() {
if (isRunning) {
System.out.println("Running.."+finalImageSwitcher+index);
index++;
index = index % images.length;
finalImageSwitcher.setImageResource(images[index]);
handler.postDelayed(this, interval);
}
}
};
handler.postDelayed(runnable, interval);
}
這是首先發生的事情,它是正確的。我得到一個閃爍的圖像。
...應用程式:ID/switcher_accept} 1 ...應用程式:ID/switcher_accept} 0 ...應用程式:ID/switcher_accept} 1 ...應用程式:ID/switcher_accept} 0 ... app:id/switcher_accept} 1
案例2運行後,這就是運行過程的樣子。正如你所看到的,兩者都在運行,並沒有發生預期的行爲。我想要的是第二個(switcher_on_way)像第一個那樣運行。我希望我的運行=假;代碼會讓這發生,但它顯然不是。
...應用程式:ID/switcher_on_way} 0 ...應用程式:ID/switcher_accept} 1 ...應用程式:ID/switcher_on_way} 0 ...應用程式:ID/switcher_accept} 1 ...應用:ID/switcher_on_way} 0 ...應用:ID/switcher_accept} 1
完美,謝謝! – user1610719 2015-02-09 22:52:50