设置图片background、src的区别和各种设置方式的区别。

本文详细介绍了在Android中ImageView设置图片的不同方法,包括在XML和Java中设置背景(background)和前景(src)图片。讨论了setBackground系列方法、setImageResource、setImageDrawable和setImageBitmap的区别,强调了内存效率和API兼容性问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ImageView设置图片的方式有很多种

在xml里面设置

设置前景: android:src=”@drawable/xxx”
设置背景: android:background=”@drawable/xxx”

在java里面的设置方式

1.设置背景图片(background)

1.SetBackground(Drawable background)
其参数为一个Drawable对象,目的是设置view的背景图片,Drawable对象可以这样获取getResources().getDrawable(R.drawable.xx),还可以是Context.getResource().getColor(R.color.white)

2. setBackgroundDrawable(Drawable background)
和SetBackground有异曲同工之妙,都是通过传入一个Drawable对象设置view控件的背景图片

3. setBackgroundColor(int color)
其参数为一个颜色值,其目的是设置一个view的背景颜色,例如context.getResouce().getColor(R.color.XXX)

4. setBackgroundResource(int resid) 它也是设置一个view的背景图片,只不过传入的是一个drawable的id值或者color颜色值,例如R.drawable.xxR.color.white

setBackground和setBackgroundDrawable方法的区别:两者都是传入一个Drawable对象,但setBackground实在API16以上才提供的方法,在API16及以下则是只能使用setBackgroundDrawable的方法,如果在API16 以上使用setBackgroundDrawable方法则会提示该方法过时

对于这种情况,可以通过对系统判断来决定使用什么方法:

//在API16以前使用setBackgroundDrawable,在API16以后使用setBackground 
// API16<---->Android 4.1
 private void setBackgroundOfVersion(View view, Drawable drawable) {  
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {  
            //Android系统大于等于API16,使用setBackground  
            view.setBackground(drawable);  
        } else {  
            //Android系统小于API16,使用setBackgroundDrawable  
            view.setBackgroundDrawable(drawable);  
        }  
    }  

setBackgroundResource和setBackgroundColor的区别:
setBackgroundResource 设置的是最底层的颜色,当改变完颜色以后,如果布局在xml文件中默认颜色是white,会被white遮盖掉。
setBackgroundColor 设置的是中间层的颜色,相当于XML文件里的颜色

1.设置前景图片(src)

1.setImageResource(int resid)
其参数是resId,必须是drawable目录下的资源

这个方法是在UI线程中对图片读取和解析的,所以有可能对一个Activity的启动造成延迟。所以如果顾虑到这个官方建议用setImageDrawable和setImageBitmap来代替。

2.setImageBitmap(Bitmap bitmap)
其参数是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
setImageDrawable参数是Drawable,也是可以接受不同来源的图片,方法中所做的事情就是更新ImageView的图片。上面两个方法实际上最后调用的都是setImageDrawable(setImageResource没有直接调用,不过更新的方法与setImageDrawable一样)。

所以综合来看setImageDrawable是最省内存高效的,如果担心图片过大或者图片过多影响内存和加载效率,可以自己解析图片然后通过调用setImageDrawable方法进行设置。=

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值