Efficacité de getDrawable (): le Drawable est-il mis en cache par le cadre?

Je dois changer l'image d'un bouton à bascule chaque fois qu'il est cliqué.

Est-il efficace de le faire?

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)); } } 

Ou cela signifie-t-il que le Drawable sera décodé à partir du fichier PNG à chaque fois?

Dans ce cas, appeler getDrawable() seulement deux fois (dans onCreate() ) et garder mes propres références aux 2 Drawable s serait mieux.

One Solution collect form web for “Efficacité de getDrawable (): le Drawable est-il mis en cache par le cadre?”

Cela ne répond pas à votre question s'il est efficace ou ne pas appeler chaque fois cette méthode. Mais comme l'a noté @ njzk2, vous pouvez utiliser un sélecteur d'état sur votre bouton de basculement.

Je vous copie un exemple de travail (j'utilise). Il suffit de changer le nom de l'drawable par les vôtres.

 <?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> 

Sur votre xml où vous définissez votre bouton Google, définissez l'arrière-plan comme suit:

 android:background="@drawable/toogle_selector" 

Où "toogle_selector" est le nom du fichier que j'ai copié avant.

Avec cela, vous pouvez oublier l'efficacité du chargement du drawable chaque fois.

J'espère que cela t'aides.

coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.