ImageView继承View,主要用于显示图片,实际上除了用来显示图片,任何Drawable对象都可以使用ImageView来显示。
Drawable参考https://www.runoob.com/w3cnote/android-tutorial-drawable1.html
1. ImageView有三个可以设置图片的属性,分别是:src, foreground, background
在xml中设置
android:foreground="@drawable/xxx" // 或者 "#0000ff"
android:src="@drawable/xxx" // 或者 "#0000ff"
android:background="@drawable/xxx" // 或者 "#0000ff"
① background: 指的是背景;foreground指的是前景;src指的是内容;三者可以同时使用;
注意:三者同时使用时,foreground在最上面显示,src在中间,background在最下面,所以同时设置时显示的是foreground设置的内容
② src填入图片时,是按照图片大小直接填充,并不会进行拉伸;而使用background和foreground填入图片,则是会根据ImageView给定的宽度来进行拉伸;
③ background和foreground是所有view都有的属性,总是缩放到view的大小,不受scaleType影响;而src是ImageView特有属性,它会受到scaleType的影响。
2.设置前景:可以在View.java中查看源码
// 设置前景图/颜色
image.setForeground(Drawable drawable);
3.设置src:可以在ImageView.java中查看源码
1. setImageDrawable(Drawable drawable) //对应src属性,首先是根据该属性值获取Drawable,再调用该函数
/*
setImageDrawable是最省内存高效的
*/
2. setImageBitmap(Bitmap bm)
/*
该函数把Bitmap对象封装成Drawable对象,然后调用setImageDrawable设置图片。如果需要频繁调用这个方法,最好自己封装个固定的Drawable对象,直接调用setImageDrawable,这样可以减少Drawable对象的创建。
*/
3. setImageResource(int resId)
/*
setImageResource的参数是resId,必须是drawable目录下的资源,它是在UI线程中对图片读取和解析的,所以可能对Activity的启动造成延迟。官方建议用setImageDrawable和setImageBitmap来代替。
*/
4.设置背景:可以在View.java中查看源码
1.setBackground(Drawable background) // 对应background属性,首先是根据resid获取Drawable,再调用该函数
2.setBackgroundResource(int resid) // 传入0时表示清除背景图片
3.setBackgroundDrawable(Drawable background)
4.setBackgroundColor(int color)
5.获取Drawable对象:
1.如果是通过src属性设置的图片(或src相关的java接口,参考3),获取Drawable对象的方法为
Drawable drawable = image.getDrawable(); // image为ImageView对象
// 如果是.9图片,获取的是NiewPatchDrawable
// 不是.9图片,获取的是BitmapDrawable,根据它可以获得Bitmap图片
Bitmap b = ((BitmapDrawable) drawable).getBitmap();
2.如果是通过background设置的图片,获取Drawable对象的方法为
Drawable drawable = image.getBackground(); // 获取的是ColorDrawable
参考:
https://www.runoob.com/w3cnote/android-tutorial-imageview.html