我正在尝试创建一个自定义 View ,该 View 工作简单:存在一个通过弧形路径显示的位图-从0deg到360deg。学位随着一些FPS的变化而变化。
因此,我使用覆盖的onDraw()
方法创建了一个自定义 View :
@Override
protected void onDraw(Canvas canvas) {
canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);
arcPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC));
canvas.drawArc(arcRectF, -90, currentAngleSweep, true, arcPaint);
arcPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
canvas.drawBitmap(bitmap, circleSourceRect, circleDestRect, arcPaint);
}
arcPaint
初始化如下:arcPaint = new Paint();
arcPaint.setAntiAlias(true);
arcPaint.setColor(Color.RED); // Color doesn't matter
现在,一切都很好,但是...背景在整个 View 中都是黑色的。
如果我设置
canvas.drawColor(..., PorterDuff.Mode.DST)
并省略canvas.drawBitmap()
-圆弧将在透明背景上正确绘制。我的问题是-如何设置
PorterDuff
模式以使其具有透明性?当然
bitmap
是带有alpha channel 的32位PNG。 最佳答案
PorterDuff.Mode.CLEAR
不适用于硬件加速。刚设定
view.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
非常适合我。