Android学习研究(五)通过BitmapShader实现圆形图片

上一篇咱们通过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来实现圆形图片了.

猜你喜欢

转载自blog.csdn.net/xuhang1993/article/details/70322607