Эффективность getDrawable (): является ли Drawable кэшированной каркасом?

Мне нужно менять изображение кнопки переключения при каждом щелчке.

Эффективно ли это сделать?

public void onClickToggleButton(View v) { if(_on) { _on=false; myImageView.setImageDrawable(getResources().getDrawable(R.drawable.btn_off)); } else { _on=true; myImageView.setImageDrawable(getResources().getDrawable(R.drawable.btn_on)); } } 

Или это означает, что Drawable будет декодироваться из PNG-файла каждый раз?

В этом случае вызов getDrawable() только дважды (в onCreate() ) и сохранение моих собственных ссылок на 2 Drawable s будет лучше.

Это не отвечает на ваш вопрос, если он эффективен или не вызывает каждый раз этот метод. Но, как отметил @ njzk2, вы можете использовать селектор состояний на кнопке переключения.

Я копирую вам пример рабочего (я использую). Просто измените имя drawable вашими чертежами.

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

На вашем xml, где вы определяете кнопку toogle, установите фон как:

 android:background="@drawable/toogle_selector" 

Где «toogle_selector» – это имя файла, который я скопировал ранее.

С этим вы можете забыть эффективность загрузки каждого из них.

Надеюсь это поможет.