首页 > 代码库 > 赵雅智_setImageResource和setImageBitmap

赵雅智_setImageResource和setImageBitmap

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

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


Sets a drawable as the content of this ImageView.  
  
Parameters:  
drawable The drawable to set  
  
public void setImageDrawable(Drawable drawable) {  
    if (mDrawable != drawable) {  
        mResource = 0;  
        mUri = null;  
  
        int oldWidth = mDrawableWidth;  
        int oldHeight = mDrawableHeight;  
  
        updateDrawable(drawable);  
  
        if (oldWidth != mDrawableWidth || oldHeight != mDrawableHeigh{  
            requestLayout();  
        }  
        invalidate();  
    }  
}  


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

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


 

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


 

 原因:

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

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

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