private static final float DISPLAY_ICON_SIZE = 49 / 1.2f;
public static Drawable mergeDrawable(Context context, Drawable backDrawable, int id, int iconSize){
Bitmap backBitmap = DrawableToBitmap(context, backDrawable);
backBitmap = createBitmap(backBitmap);
Bitmap foreBitmap = Bitmap.createBitmap(BitmapFactory.decodeResource(context.getResources(), id));
int width = backBitmap.getWidth() > foreBitmap.getWidth() ? backBitmap.getWidth() : foreBitmap.getWidth();
Bitmap bitmap = Bitmap.createBitmap(iconSize, iconSize, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
canvas.drawBitmap(backBitmap, (iconSize - DisplayUtil.dp2px(context, DISPLAY_ICON_SIZE)) / 2f - 2, (iconSize - DisplayUtil.dp2px(context, DISPLAY_ICON_SIZE) - foreBitmap.getHeight()) / 2f + 7, null);
canvas.drawBitmap(foreBitmap, (iconSize - foreBitmap.getWidth()) / 2f, (iconSize + DisplayUtil.dp2px(context, DISPLAY_ICON_SIZE) - foreBitmap.getHeight()) / 2f, null);
backBitmap.recycle();
foreBitmap.recycle();
Drawable drawable = new BitmapDrawable(bitmap);
return drawable;
}
private static Bitmap DrawableToBitmap(Context context, Drawable drawable) {
// 获取 drawable 长宽
int width = drawable.getIntrinsicWidth();
int heigh = drawable.getIntrinsicHeight();
drawable.setBounds(0, 0, DisplayUtil.dp2px(context, DISPLAY_ICON_SIZE), DisplayUtil.dp2px(context, DISPLAY_ICON_SIZE));
// 获取drawable的颜色格式
Bitmap.Config config = drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888
: Bitmap.Config.RGB_565;
// 创建bitmap
Bitmap bitmap = Bitmap.createBitmap(width, heigh, config);
// 创建bitmap画布
Canvas canvas = new Canvas(bitmap);
// 将drawable 内容画到画布中
drawable.draw(canvas);
return bitmap;
}
public static Bitmap createBitmap(Bitmap bitmap) {
int width = bitmap.getWidth();
int height = bitmap.getHeight();
Bitmap faceIconGreyBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(faceIconGreyBitmap);
Paint paint = new Paint();
ColorMatrix colorMatrix = new ColorMatrix();
colorMatrix.setSaturation(0);
ColorMatrixColorFilter colorMatrixFilter = new ColorMatrixColorFilter(colorMatrix);
paint.setColorFilter(colorMatrixFilter);
canvas.drawBitmap(bitmap, 0, 0, paint);
return faceIconGreyBitmap;
}
网友评论