4

这方面的例子是 setImageResource 与 setImageDrawable 同样适用于背景?

那什么是首选呢?

4

3 回答 3

10

根据文档 setImageResource,在 UI 线程上进行位图读取和解码,这可能会导致延迟打嗝。因此,如果您在setImageResource上面询问在哪种情况下是更好的选择,您的问题会更好setImageDrawable

我的猜测setImageResource是用于延迟加载图像,并且setImageDrawable在视图启动期间已经通过 Drawable 加载图像时使用。哪一个最适合您可能取决于您是否有更严重的内存限制;根据我的经验,setImageResource几乎不需要。

并回答为什么您的代码不起作用;这是因为你不能getDrawable()从 resourceId 0 做,这会引发异常,因为它找不到资源。由于setImageResource是延迟加载,它会在创建 Drawable 之前检查资源是否为 0,因此不会引发异常。您可能可以将其重构为if(checked) setImageDrawable(..) else setImageDrawable(null);

于 2012-06-27T08:58:28.923 回答
4

实际上,这两种方法都有一些区别。

第一个,setImageResource当您的res文件夹中有所需的图像时使用。但是,setImageDrawable当您创建 Drawable 类型的 Object 时,可能会使用第二种方法。

另外需要注意的是,资源文件可以转换为 Drawable 类型,但不能将 Drawable 转换为 Resource。

当您的 res 文件夹中有图像时,如果您使用第一种方法而不是将其转换为 Drawable 然后使用第二种方法,那就太好了。

于 2012-06-27T08:58:20.550 回答
0

可绘制对象将在内存中 setImageResource 是指向存储在 gen 文件中的 id

于 2012-06-27T08:58:52.463 回答