getDrawable()的效率:是框架缓存的Drawable吗?

Séb*_*ien 8 performance android android-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));
    }
}
Run Code Online (Sandbox Code Playgroud)

或者它是否意味着Drawable每次都会从PNG文件解码?

在这种情况下,getDrawable()只调用两次(in onCreate())并保持我自己对2 Drawables 的引用会更好.

Sul*_*ain 0

这不会回答您的问题是否有效或不每次调用此方法。但正如 @njzk2 指出的,您可以在切换按钮上使用状态选择器。

我向您复制了一个工作示例(我正在使用)。只需将可绘制对象的名称更改为您的可绘制对象即可。

<?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>
Run Code Online (Sandbox Code Playgroud)

在您定义 Toogle 按钮的 xml 中,将背景设置为:

android:background="@drawable/toogle_selector"
Run Code Online (Sandbox Code Playgroud)

其中“toogle_selector”是我之前复制的文件的名称。

这样你就可以忘记每次加载可绘制对象的效率。

希望这可以帮助。