Android setImageResource、setImageBitmap、setImageDrawable区别
2015-12-14 16:30
375 查看
转至:http://jingyan.baidu.com/article/6525d4b1332117ac7d2e9433.html
百度经验:jingyan.baidu.com
ImageView设置图片的方式有很多钟,可以在xml里面写android:src=”@drawable/xxx”,也可以在java代码里面设置。
在java里面的设置方式也有多种,方法包括:setImageResource,setImageDrawable,setImageBitmap。
在xml里面设置实际上和在java里面调用setImageResource是一样的,当然xml多了一个解析的过程,放到java代码里调用会稍微好些(实际没什么区别)。
3种设置图片方式的区别:
(1)setImageResource的参数是resId,必须是drawable目录下的资源.另外,在setImageResource方法中有写明了注释
* <pclass="note">This does Bitmap reading and decoding on the UI
* thread, which can cause a latency hiccup.If that's a concern,
* consider using {@link #setImageDrawable(android.graphics.drawable.Drawable)}or
* {@link #setImageBitmap(android.graphics.Bitmap)} and
* {@link android.graphics.BitmapFactory} instead.</p>
这个方法是在UI线程中对图片读取和解析的,所以有可能对一个Activity的启动造成延迟。所以如果顾虑到这个官方建议用setImageDrawable和setImageBitmap来代替。
(2)setImageBitmap参数是Bitmap,可以解析不同来源的图片再进行设置。不过我们看看setImageBitmap的源码:
@android.view.RemotableViewMethod
public void setImageBitmap(Bitmap bm) {
// if this is used frequently, mayhandle bitmaps explicitly
// to reduce the intermediate drawable object
setImageDrawable(newBitmapDrawable(mContext.getResources(), bm));
}
实际上setImageBitmap做的事情就是把Bitmap对象封装成Drawable对象,然后调用setImageDrawable来设置图片。因此代码里面才写上了建议,如果需要频繁调用这个方法的话最好自己封装个固定的Drawable对象,直接调用setImageDrawable,这样可以减少Drawable对象。因为每次调用setImageBitmap方法都会对Bitmap对象new出一个Drawable。
(3)setImageDrawable参数是Drawable,也是可以接受不同来源的图片,方法中所做的事情就是更新ImageView的图片。上面两个方法实际上最后调用的都是setImageDrawable(setImageResource没有直接调用,不过更新的方法与setImageDrawable一样)。
所以综合来看setImageDrawable是最省内存高效的,如果担心图片过大或者图片过多影响内存和加载效率,可以自己解析图片然后通过调用setImageDrawable方法进行设置。
百度经验:jingyan.baidu.com
ImageView设置图片的方式有很多钟,可以在xml里面写android:src=”@drawable/xxx”,也可以在java代码里面设置。
在java里面的设置方式也有多种,方法包括:setImageResource,setImageDrawable,setImageBitmap。
在xml里面设置实际上和在java里面调用setImageResource是一样的,当然xml多了一个解析的过程,放到java代码里调用会稍微好些(实际没什么区别)。
3种设置图片方式的区别:
(1)setImageResource的参数是resId,必须是drawable目录下的资源.另外,在setImageResource方法中有写明了注释
* <pclass="note">This does Bitmap reading and decoding on the UI
* thread, which can cause a latency hiccup.If that's a concern,
* consider using {@link #setImageDrawable(android.graphics.drawable.Drawable)}or
* {@link #setImageBitmap(android.graphics.Bitmap)} and
* {@link android.graphics.BitmapFactory} instead.</p>
这个方法是在UI线程中对图片读取和解析的,所以有可能对一个Activity的启动造成延迟。所以如果顾虑到这个官方建议用setImageDrawable和setImageBitmap来代替。
(2)setImageBitmap参数是Bitmap,可以解析不同来源的图片再进行设置。不过我们看看setImageBitmap的源码:
@android.view.RemotableViewMethod
public void setImageBitmap(Bitmap bm) {
// if this is used frequently, mayhandle bitmaps explicitly
// to reduce the intermediate drawable object
setImageDrawable(newBitmapDrawable(mContext.getResources(), bm));
}
实际上setImageBitmap做的事情就是把Bitmap对象封装成Drawable对象,然后调用setImageDrawable来设置图片。因此代码里面才写上了建议,如果需要频繁调用这个方法的话最好自己封装个固定的Drawable对象,直接调用setImageDrawable,这样可以减少Drawable对象。因为每次调用setImageBitmap方法都会对Bitmap对象new出一个Drawable。
(3)setImageDrawable参数是Drawable,也是可以接受不同来源的图片,方法中所做的事情就是更新ImageView的图片。上面两个方法实际上最后调用的都是setImageDrawable(setImageResource没有直接调用,不过更新的方法与setImageDrawable一样)。
所以综合来看setImageDrawable是最省内存高效的,如果担心图片过大或者图片过多影响内存和加载效率,可以自己解析图片然后通过调用setImageDrawable方法进行设置。
相关文章推荐
- TextView实现歌词同步
- Android 源码解析: 图片加载库Picasso 2 Cache机制
- android平台TextView使用ImageSpan画廊GIF图像
- SQLITE 在 ANDROID 中的详细使用
- 解决Android平台中应用程序OOM异常的方法
- Android ormlite升级数据库方案-KJFrameForAndroid升级Sqllite数据库
- Android圆形图/头像
- android中使用回调接口实现底部菜单的切换
- Android中定时执行任务的3种实现方法
- android 布局属性大全
- 自定义ProgressDialog
- 【Android】javadoc, Android注释中添加链接
- Android的SQLite
- 记录Android开发的点点滴滴
- Android --调启百度地图
- MPAndroidChart 教程:开始 Getting Started(一)
- Android中悬浮窗口
- android冷启动优化
- Android输入法弹出,布局上移,背景不会压缩
- Android加壳