【发布时间】:2018-11-07 06:20:54
【问题描述】:
每次单击切换按钮时,我都需要更改它的图像。
这样做有效率吗?
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));
}
}
或者这是否意味着每次都会从PNG文件中解码Drawable?
在这种情况下,只调用两次 getDrawable()(在 onCreate() 中)并保留我自己对 2 个 Drawables 的引用会更好。
【问题讨论】:
-
查看源代码grepcode.com/file/repository.grepcode.com/java/ext/…(如果您遵循方法调用,您将最终进入缓存部分并最终进入 BitmapState)(简短的回答是有一个 WeakRef 缓存以避免解码超过只要内存允许,一次)
-
附带说明,当 android ToggleButton 已经这样做时,您真的不应该 a/ 添加自己的状态,并且 b/ 每次单击它时都更改可绘制对象。相反,使用 StateListDrawable 来定义用于每个状态的可绘制对象(开、关、按下、聚焦、禁用......)
-
你为什么要自己创建Drawable?调用 setImageResource 会更好。
-
@StephaneMathis 该文档包含有关从 UI 线程调用
setImageResource()的警告。另外我认为这种方法的效率和我提出的方法没有什么不同。
标签: android performance android-drawable