2014-11-21 30 views
1

我試圖使用ImageView做一個切換開關按鈕,但圖像會永遠改變。ImageView切換繪圖需要很長的時間

這裏是我的代碼:

public void toggleBtn(View v) { 
    ImageView btn = (ImageView) v; 
    if (state) { // "state" is a variable that switches with the button 
     btn.setImageDrawable(getResources().getDrawable(R.drawable.pwbtn_off)); 
     state = !state; 
    } else { 
     btn.setImageDrawable(getResources().getDrawable(R.drawable.pwbtn_on)); 
     state = !state; 
    } 
} 

圖像變化後的代碼運行前的影像學改變(我假設的變化是異步),但兩者的圖像只是52KB所以我懷疑它採取這麼長時間才能加載圖像。

有沒有更有效的方法來做到這一點?

+2

首先,首先定義「永遠」,因爲我不認爲這意味着在這裏字面意思,否則這將是一個不同的問題。 – codeMagic 2014-11-21 15:34:50

+0

好點。我改變了標題 – franga2000 2014-11-21 15:42:09

回答

0

您可能需要invalidate該視圖來強制操作系統更新佈局。

public void toggleBtn(View v) { 
    ImageView btn = (ImageView) v; 
    if (state) { // "state" is a variable that switches with the button 
     btn.setImageDrawable(getResources().getDrawable(R.drawable.pwbtn_off)); 
     state = !state; 
    } else { 
     btn.setImageDrawable(getResources().getDrawable(R.drawable.pwbtn_on)); 
     state = !state; 
    } 
    v.invalidate(); 

} 
+0

它似乎沒有改變任何東西,但我會嘗試在其他一些設備上測試它只是爲了確保 – franga2000 2014-11-21 15:52:17

+0

您可能還需要添加v.requestLayout() – aez 2014-11-21 15:59:37

+0

我試過了,我只是試過這兩個一次,它仍然沒有幫助(在2.2,4.2和4.4測試) – franga2000 2014-11-21 16:33:15