版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。
展开
一,自定义drawable
利用画笔方法setShader()。
自定义Drawable 代码
publicclassMyDrawableextendsDrawable {private Paint mPaint;private Bitmap bitmap;publicMyDrawable(Bitmap bitmap) {this.bitmap = bitmap; mPaint =new Paint(Paint.ANTI_ALIAS_FLAG); BitmapShader bs =new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP); mPaint.setShader(bs); }@Overridepublicvoiddraw(Canvas canvas) { canvas.drawCircle(bitmap.getWidth() /2, bitmap.getHeight() /2, Math.min(bitmap.getWidth() /2, bitmap.getHeight() /2), mPaint); }@OverridepublicvoidsetAlpha(int alpha) { }@OverridepublicvoidsetColorFilter(ColorFilter colorFilter) { }@OverridepublicintgetOpacity() {return0; }@OverridepublicintgetIntrinsicWidth() {return bitmap.getWidth(); }@OverridepublicintgetIntrinsicHeight() {return bitmap.getHeight(); } }
利用BitmapShader 着色画笔来实现,相当于画笔绘制的区域利用图片相应的区域来代替。
二,自定义View
利用画笔方法setXfermode()。
首先是google给出的官方图谱
奈何被这张图坑了好久,发现这图不对。
正确的应该是:<