setMeasuredDimension(width, height);
/根据画布尺寸生成相同尺寸的背景图/
newBgBitmap = clipBitmap(bgBitmap, width, height);
/根据新的背景图生成填充部分/
srcBitmap = createSmallBitmap(newBgBitmap);
}
设置画笔的混合模式,生成一张自定义形状的图片供填充部分使用
public Bitmap createSmallBitmap(Bitmap var) {
Bitmap bitmap = Bitmap.createBitmap(shadowSize, shadowSize, Bitmap.Config.ARGB_8888);
Canvas canvas1 = new Canvas(bitmap);
canvas1.drawCircle(shadowSize / 2, shadowSize / 2, shadowSize / 2, paintSrc);
/设置混合模式/
paintSrc.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
/在指定范围随机生成空缺部分坐标,保证空缺部分出现在View右侧/
int min = width / 3;
int max = width - shadowSize / 2 - padding;
Random random = new Random();
shadowLeft = random.nextInt(max) % (max - min + 1) + min;
Rect rect = new Rect(shadowLeft, (height - shadowSize) / 2, shadowSize + shadowLeft, (height + shadowSize) / 2);
RectF rectF = new RectF(0, 0, shadowSize, shadowSize);
canvas1.drawBitmap(var, rect, rectF, paintSrc);
paintSrc.setXfermode(null);
return bitmap;
}
在onDraw()方法中依次画出背景图、空缺部分、填充部分,注意先后顺序