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

你可能感兴趣的:(知识回顾,android基础)