关于ImageView,常很容易混淆background 和 src 两个属性的特征:
(1)background通常指的都是背景,而src指的是内容。
(2)当使用src填入图片时,是按照图片大小直接填充,并不会进行拉伸。
代码用法设置:
一.设置ImageView的src:
1.image.setImageDrawable(getResources().getDrawable(R.drawable.vod_detail_actor_default));
2.
String path=Environment.getExternalStorageDirectory()+File.separator+”test.jpg”;
Bitmap bm = BitmapFactory.decodeFile(path);
image.setImageBitmap(bm);
3.image.setImageBitmap(BitmapFactory.decodeResource(page.getContext().getResources(), R.drawable.vod_detail_actor_default));
4.image.setImageResource(R.drawable.vod_detail_actor_default);
注:
setImageResource(id)会根据设备分辨率进行图片大小缩放适配。
源码中对该接口的注释:
在UI线程中处理bitmap,这可能造成主线程的延迟(如导致Activity启动延迟等情况)。
可以考虑使用setImageDrawable(Drawable)或setImageBitmap(Bitmap)代替。
setImageBitmap(BitmapFactory.decodeResource(res, id))大小需要手动调试。
setImageBitmap实际还是调用的setImageDrawable,但是强制setImageDrawble执行完整的setImageDrawable而不是做对象引用比较。setImageBitmap将Bitmap对象封装成Drawable对象,如果提供了完整的各种分辨率下的图片,两种方法没有区别。
另外:setImageDrawable(null)可以清除一个ImageView控件设置的图片。
因此综合来看,setImageDrawable是最省内存最高效的,如果担心图片过大或者图片过多影响内存和加载效率,可以自己解析图片然后通过调用setImageDrawable方法进行设置。
二.设置ImageView的background:
1.image.setBackground(getResources().getDrawable(R.drawable.vod_detail_actor_default));
2.image.setBackgroundResource(R.drawable.vod_detail_actor_default);
3.image.setBackgroundDrawable(getResources().getDrawable(R.drawable.vod_detail_actor_default));
在ImageView中,可以同时设置src和background属性(为了减少绘制,可以根据使用场景来设置相应属性);另外还有一个混淆的地方就是:android:scaleTyle这个属性(scaleType 只对src属性有效)如果需要对其进行不同图片的样式展示,就需要使用android:scaleTyle这个属性。
这里就只列出scaleType 相关值定义,实际效果相信大家本地实践就清楚了:
1.fitXY:对图像的横向与纵向进行独立缩放,使得该图片完全适应ImageView,但是图片的横纵比可能会发生改变;
2. fitStart:保持纵横比缩放图片,直到较长的边与Image的边长相等,缩放完成后将图片放在ImageView的左上角 ;
3.fitCenter:同上,缩放后放于中间;
4. fitEnd:同上,缩放后放于右下角;
5.center:保持原图的大小,显示在ImageView的中心。当原图的size大于ImageView的size,超过部分裁剪处理;
6. centerCrop:保持横纵比缩放图片,直到完全覆盖ImageView,可能会出现图片的显示不完全;
7. centerInside:保持横纵比缩放图片,直到ImageView能够完全地显示图片;
8. matrix:默认值,不改变原图的大小,从ImageView的左上角开始绘制原图,原图超过ImageView的部分作裁剪处理