3

目标是创建复合形状并添加浮雕效果。我可以成功创建如下图所示的形状。

    woodPaint = new Paint();
    woodPaint.setAntiAlias(true);
    woodBitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.wood);
    woodShader = new BitmapShader(woodBitmap, Shader.TileMode.REPEAT, Shader.TileMode.REPEAT);
    woodPaint.setShader(woodShader);

    ...

    @Override
    protected void onDraw(Canvas canvas) {

        canvas.drawCircle(handleX, radius, radius, woodPaint);
        canvas.drawRoundRect(baseRectF, 25, 25, woodPaint);

        super.onDraw(canvas);
    }

图片:

然后我添加一个 EmbossMaskFilter

    paintEmboss = new EmbossMaskFilter(new float[] { 1, 1, 1 }, 0.1f, 8f, 5f);
    woodPaint.setMaskFilter(paintEmboss);

图片:

如您所见,浮雕蒙版分别应用于两个形状。如何将形状组合在一起并将浮雕应用于整个对象?我尝试将 xfer 模式设置为某种风格的搬运工 duff 但这不会影响浮雕蒙版分别应用于每个形状的事实。

谢谢你的帮助!

编辑: 如 Orabîg 所示,您必须使用已设置浮雕过滤器的油漆绘制一条路径。注意:方法 setMaskFilter() 是少数在硬件加速打开时不起作用的方法之一。我通过禁用活动的硬件加速解决了我在手机运行果冻豆时遇到的问题。您可以在您选择的任何级别禁用硬件加速:

  • 应用
  • 活动
  • 窗户
  • 看法

干杯!

4

1 回答 1

4

好吧,你只需要一种浮雕效果,所以你应该只画一种形状。

所以你应该使用 Canvas.drawPath() 方法。

您只需要定义一个 Path 对象,使用以下方法: 路径定义步骤 首先定义 3 个 RectF 对象,它们将是最左边圆的边界框(想象它后面的圆)、最右边的一个和滑动的: 框定义 您可能需要做一些额外的数学运算来确定用于 box2 的正确角度(它们取决于圆和整个矩形的各自大小)

祝你好运 !

于 2013-02-16T00:18:57.740 回答