前言
在项目遇到了使用圆角图片的需求,之前的代码是使用XferMode实现的,但在不同的机型中出现了问题。
于是我想在原代码基础上进行修改,却没有成功,于是使用裁剪的方式实现了圆角。
下来后,借鉴了大牛的文章,发现了XferMode中的坑,总结后,完成的圆角的实现。
XferMode中的坑
原文链接奉上,非常感谢博主!
效果
实现了RoundedView类,效果如下:
代码
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,前面引用的博文中已经写得很清楚了。