setImageResource和setImageBitmap详解。

在4.0.4 r1.2中查看android.widget.ImageView源代码可以发现,setImageBitmap()方法其实是调用了setImageDrawable()方法进行重绘。

  1. Sets a Bitmap as the content of this ImageView.    
  2.     
  3. Parameters:    
  4. bm The bitmap to set    
  5.     
  6. @android.view.RemotableViewMethod    
  7. public void setImageBitmap(Bitmap bm) {    
  8.     // if this is used frequently, may handle bitmaps explicitly    
  9.     // to reduce the intermediate drawable object    
  10.     setImageDrawable(new BitmapDrawable(mContext.getResources(), bm));    
  11. }    


  1. Sets a drawable as the content of this ImageView.    
  2.     
  3. Parameters:    
  4. drawable The drawable to set    
  5.     
  6. public void setImageDrawable(Drawable drawable) {    
  7.     if (mDrawable != drawable) {    
  8.         mResource = 0;    
  9.         mUri = null;    
  10.     
  11.         int oldWidth = mDrawableWidth;    
  12.         int oldHeight = mDrawableHeight;    
  13.     
  14.         updateDrawable(drawable);    
  15.     
  16.         if (oldWidth != mDrawableWidth || oldHeight != mDrawableHeigh{    
  17.             requestLayout();    
  18.         }    
  19.         invalidate();    
  20.     }    
  21. }    


同样的布局文件,小分辨率手机:

1、使用setImageBitmap设置时,出现如下现象:


 

 2、使用setImageResource时,图片显示正常


 

 原因:

setImageResource(id)会根据设备分辨率进行图片大小缩放适配

setImageBitmap(BitmapFactory.decodeResource(res,id))大小需要手动调。

如果你提供了完整的各种分辨率下的图片的话,两种方法都应该不会有混乱。

本文转自:http://blog.csdn.net/zhaoyazhi2129/article/details/32080827

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值