80,350
社区成员
发帖
与我相关
我的任务
分享
//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);
//以下代码目的是将从各个应用中读取出来的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);
大概就是这样,有什么不明白的可以再提问~