Jes*_*son 30 android android-widget
我正在使用Android的android.graphics.Canvas类来绘制一个环.我的onDraw方法剪切画布为内圈创建一个洞,然后在洞上绘制整个外圈:
clip = new Path();
clip.addRect(outerCircle, Path.Direction.CW);
clip.addOval(innerCircle, Path.Direction.CCW);
canvas.save();
canvas.clipPath(clip);
canvas.drawOval(outerCircle, lightGrey);
canvas.restore();
Run Code Online (Sandbox Code Playgroud)
结果是一个带有漂亮,抗锯齿外边缘和锯齿状,丑陋内边缘的戒指:

我能做些什么来消除内缘?
我不想通过在中间画一个灰色圆圈来欺骗,因为对话框略微透明.(这种透明度在其他背景上并不那么微妙.)
Rom*_*rik 20
AFAIK,你不能解决剪辑区域.
我建议使用位图屏蔽.将粉色,白色和浅灰色前景渲染为一个位图,将外/内圆遮罩(灰度alpha通道)Paint.setXfermode渲染到另一个位图,然后使用以遮罩作为其Alpha通道渲染前景位图.
可以在ApiDemos这里的源代码中找到一个示例:
编辑:为了更好的衡量,这里是API演示中该活动的屏幕截图,说明了屏蔽: