使用XferMode绘制圆角图片

前言

在项目遇到了使用圆角图片的需求,之前的代码是使用XferMode实现的,但在不同的机型中出现了问题。

于是我想在原代码基础上进行修改,却没有成功,于是使用裁剪的方式实现了圆角。

下来后,借鉴了大牛的文章,发现了XferMode中的坑,总结后,完成的圆角的实现。

XferMode中的坑

原文链接奉上,非常感谢博主!
https://blog.csdn.net/u013085697/article/details/52096703

效果

实现了RoundedView类,效果如下:
使用XferMode绘制圆角图片_第1张图片

代码

onDraw:
        int sc = canvas.saveLayer(0, 0, width, height, null, Canvas.ALL_SAVE_FLAG);
        canvas.save();
        canvas.drawBitmap(mDstBitmap,0, 0, mPaint);
        mPaint.setXfermode(mXFerMode);
        canvas.drawBitmap(mSrcBitmap, 0, 0, mPaint);
        mPaint.setXfermode(null);
        canvas.restore();
        canvas.restoreToCount(sc);

目标Bitmap的获取:
        Bitmap bm = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
        Canvas c = new Canvas(bm);
        Paint p = new Paint(Paint.ANTI_ALIAS_FLAG);
        p.setStyle(Paint.Style.FILL_AND_STROKE);
        p.setColor(0xffffffff);
        c.drawRoundRect(new RectF(0, 0, w, h), mOldRadius, mOldRadius, p);
        return bm;

src Bitmap的获取:
        Bitmap bm = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
        Canvas c = new Canvas(bm);
        Bitmap scaledBitmap = scaleBitmap(src, w, h);
        c.save();
        c.translate(w / 2, h / 2);
        c.drawBitmap(scaledBitmap, -scaledBitmap.getWidth() / 2, -scaledBitmap.getHeight() / 2, mPaint);
        c.restore();
        return bm;

小结

我只是对XferMode进行了简单的运用,完成了自己所需的实现;
重点在于如何使用XferMode,前面引用的博文中已经写得很清楚了。


你可能感兴趣的:(Android)