将图像从资源设置为可绘制的区别?

时间:2012-06-27 08:50:04

标签: android

此示例适用于setImageResource与setImageDrawable 同样适用于背景?

那么首选的是什么?

3 个答案:

答案 0 :(得分:10)

根据documentation setImageResource在UI线程上进行Bitmap读取和解码,这可能会导致延迟打嗝。因此,如果您问及setImageResourcesetImageDrawable以上是更好的选择,那么您的问题会更好。

我的猜测是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