2014-11-21 3 views
1

Я пытаюсь сделать переключаемую кнопку включения/выключения, используя ImageView, но изображение постоянно меняется.ImageView switch drawable занимает очень много времени

Вот мой код:

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

+0

Хорошая точка. Я изменил заголовок – franga2000

ответ

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

+0

Вам также может понадобиться добавить v.requestLayout() – aez

+0

Я уже пробовал это, и я просто попробовал оба из них сразу, и это все еще не помогает (проверено на 2.2, 4.2 и 4.4) – franga2000

Смежные вопросы