我正在尝试画一个带有黑色阴影边框的戒指。当我使用任何颜色(如RED)时,我可以使用自定义视图实现此功能,但我想要的是带有黑色阴影边框的透明圆圈。
Paint mPaint = new Paint();
mPaint.setAntiAlias(true);
mPaint.setColor(Color.RED);
mPaint.setShadowLayer(5.5f, 6.0f, 6.0f, Color.BLACK);
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawCircle(70, 70, 50, mPaint); }
答案 0 :(得分:3)
这里发生的是它正在绘制一个填充透明圆圈,并将阴影层设置为它。由于圆是透明的,因此您可以通过它看到对象的整个阴影,而不仅仅是您正在寻找的边。阴影是黑色的,所以看起来整个圆圈都是黑色的。
尝试将“绘画”样式设置为“笔触”。这应该让中间透明,并且只绘制外环的阴影。它可能会在两个方向上绘制阴影(内部和外部),因此您可能需要相应地调整阴影半径。
mPaint.setStyle(Paint.Style.STROKE);
答案 1 :(得分:0)
您是否定位到Android SDK 11或更高版本?由于已禁用具有硬件支持的HoneyComb阴影渲染,因此您必须为此图层启用软件渲染。您必须注释您的功能以设置油漆,如下所示:
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
private void setUpPaint(){
mPaint.setAntiAlias(true);
mPaint.setColor(Color.RED);
mPaint.setShadowLayer(5.5f, 6.0f, 6.0f, 0x80000000);
/* --- for android:minSdkVersion="11" --- */
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
setLayerType(LAYER_TYPE_SOFTWARE, mPaint);
}
}
答案 2 :(得分:0)
你需要使用完全透明的颜色有效地绘制阴影,就像你到目前为止所发现的那样,然后使用PorterDuff.Mode.CLEAR删除那个彩色的中心 - 只留下外面的阴影。
PorterDuffXfermode mXferMode = new PorterDuffXfermode(PorterDuff.Mode.CLEAR);
// draw the src/dst example into our offscreen bitmap
int sc = canvas.saveLayer(0, 0, 70 + 50, 70 + 50, null,
Canvas.MATRIX_SAVE_FLAG |
Canvas.CLIP_SAVE_FLAG |
Canvas.HAS_ALPHA_LAYER_SAVE_FLAG |
Canvas.FULL_COLOR_LAYER_SAVE_FLAG |
Canvas.CLIP_TO_LAYER_SAVE_FLAG);
canvas.drawCircle(70, 70, 50, shadowPaint);
shadowPaint.setXfermode(mXferMode);
canvas.drawCircle(70, 70, 50, shadowPaint);
shadowPaint.setXfermode(null);
canvas.restoreToCount(sc);