//icon为一个Drawable,mOldBounds为一个Rect
final Bitmap.Config c = icon.getOpacity() != 
                        PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888: 
                        Bitmap.Config.RGB_565;
final Bitmap thumb = Bitmap.createBitmap(width, height, c);
final Canvas canvas = new Canvas(thumb);
canvas.setDrawFilter(new PaintFlagsDrawFilter(Paint.DITHER_FLAG, 0));

mOldBounds.set(icon.getBounds());
icon.setBounds(0,0,width,height);
icon.draw(canvas);
icon.setBounds(mOldBounds);
icon = new BitmapDrawable(thumb);TextView.setCompoundDrawablesWithIntrinsicBounds(null, icon, null, null);最近在看Home这个例子的时候遇到上面的代码,看了很久还是不懂,因此求解...
感觉对于画图这块好像挺难懂的有些方法...
希望高手能花点时间,把这解释写得详细些,最好能每句都解释一下...谢谢

解决方案 »

  1.   


    //以下代码目的是将从各个应用中读取出来的icon处理成指定大小的缩略图(thumb),也就是进行缩放
    //看icon是否具有透明度,如果没有的话指定Bitmap颜色格式为RGB565,有则指定为ARGB8888
    final Bitmap.Config c = icon.getOpacity() != 
                            PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888: 
                            Bitmap.Config.RGB_565;
    //创建宽高为width,height的bitmap
    final Bitmap thumb = Bitmap.createBitmap(width, height, c);
    //创建canvas用于绘图,并指定绘制到thumb这张bitmap上
    final Canvas canvas = new Canvas(thumb);
    //指定filter为抖动,这样会使绘图效果更好一些
    canvas.setDrawFilter(new PaintFlagsDrawFilter(Paint.DITHER_FLAG, 0));//记录icon原来的bounds
    mOldBounds.set(icon.getBounds());
    //设置icon的bounds为想要的宽高
    icon.setBounds(0,0,width,height);
    //绘制
    icon.draw(canvas);
    //恢复icon的bounds
    icon.setBounds(mOldBounds);
    //将thumb包装成一个BitmapDrawable
    icon = new BitmapDrawable(thumb);//将thumb设置为textview的compoundDrawable
    TextView.setCompoundDrawablesWithIntrinsicBounds(null, icon, null, null);
    大概就是这样,有什么不明白的可以再提问~