上一篇咱们通过PorterDuffXfermode实现圆形图片 Android学习研究(四)通过PorterDuffXfermode形成简单的圆角和圆形图片
这一次咱们用BitmapShader来实现圆形图片.
BimapShader实现圆形图片的原理是:
1,通过Matrix对图片进行缩放,
2,然后画笔设置shader,
3,最后画圆
首先我们对图片进行缩放,然后设置shader:
实例化画笔和Bitmap以及Matrix
private void initPaint() {
paint = new Paint();
paint.setAntiAlias(true);
mBitmap = BitmapFactory.decodeResource(getResources(),mBackGroundResource);
mMatrix = new Matrix();
}
然后通过onMeasure获取控件宽高的最小值:
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec,heightMeasureSpec);
mMinWidth = Math.min(getMeasuredWidth(),getMeasuredHeight());
mRadius = mMinWidth/2;
setMeasuredDimension(mMinWidth,mMinWidth);
}
我们再获取图片宽高的最小值,通过view和图片的比例进行缩放,然后shader设置Matrix,画笔设置shader:
private void setShader(){
float scale = 1.0f;
int btWidth = Math.min(mBitmap.getWidth(),mBitmap.getHeight());
scale = mMinWidth*1.0f/btWidth;
mMatrix.setScale(scale,scale);
BitmapShader bitmapShader = new BitmapShader(mBitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
bitmapShader.setLocalMatrix(mMatrix);
paint.setShader(bitmapShader);
}
最后,在onDraw()方法里,画圆:
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
setShader();
canvas.drawCircle(mRadius,mRadius,mRadius,paint);
}
这样咱们就可以通过BitmapShader来实现圆形图片了.