其实,想实现这个功能还是很简单的,也就一句话的事。
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
废话不多说,我们还是先来看看效果:
其实模式设置并不是只有 SRC_IN 一种,看下图:
有了这些感性的认识,我们来看看如何用代码实现吧。
代码实现
@Override
protected void onDraw(Canvas canvas) {
//第一步:创建 bitmap
Bitmap target = Bitmap.createBitmap(mWidth,mHeight, Bitmap.Config.ARGB_8888);
//第二步:创建一个和 bitmap 同等大小的 画布
Canvas ca = new Canvas(target);
//第三步:创建画笔
Paint paint = new Paint();
paint.setColor(Color.BLUE);
//第四步:绘制圆
ca.drawCircle(mWidth/2,mHeight/2,mWidth/2-20,paint);
//第五步:设置模式
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
//第六步:绘制图片
ca.drawBitmap(mSelfPhoto,0,0,paint);
//第七步:在画布上绘制
canvas.drawBitmap(target,0,0,null);
}
注意事项:
- 使用对象:一定要是 图形+bitmap,并且,图形先绘制,bitmap后绘制。
- 使用步骤:产生一个新的 bitmap -》 产生一个与bitmap相同大小的canvas -》绘制图形 -》绘制图片 -》在控件画布上绘制这个bitmap。
- 在这个新的 bitmap 绘制的过程中 图形 与 图像 的绘制要是用同一个画笔。
图片绘制的基础知识请参考:自定义组件之绘制图片