此示例适用于setImageResource与setImageDrawable 同样适用于背景?
那么首选的是什么?
答案 0 :(得分:10)
根据documentation setImageResource
在UI线程上进行Bitmap读取和解码,这可能会导致延迟打嗝。因此,如果您问及setImageResource
在setImageDrawable
以上是更好的选择,那么您的问题会更好。
我的猜测是setImageResource
用于延迟加载图像,并且在视图启动期间已经通过Drawable加载图像时使用setImageDrawable
。哪一个最适合你可能取决于你是否有更严重的记忆限制;根据我的经验,几乎不需要setImageResource
。
并回答为什么你的代码不起作用;这是因为您无法从resourceId 0 this throws an exception as it can't find the resource执行getDrawable()
。由于setImageResource
在创建Drawable之前是延迟加载it checks if the resource is 0,因此不会抛出任何异常。
您可以将其重构为if(checked) setImageDrawable(..) else setImageDrawable(null);
答案 1 :(得分:4)
实际上两种方法都有一点差别。
第一个,当您在 res 文件夹中包含所需图片时,会使用setImageResource
。但是当您创建Drawable类型的Object时,可能会使用第二个方法setImageDrawable
。
另外需要注意的是,资源文件可以转换为Drawable类型,但无法将Drawable转换为Resource。
当您的图像位于res文件夹中时,如果您使用第一种方法而不是将其转换为Drawable然后使用第二种方法,那么它就会很好。
答案 2 :(得分:0)
一个drawable将在内存中setImageResource是一个指向存储在gen文件中的id