如何组合多个形状并添加浮雕?

时间:2013-02-15 22:31:57

标签: android

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

    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()是少数几种在打开硬件加速时不起作用的方法之一。我通过禁用活动的硬件加速解决了我在运行软糖豆的手机上遇到的问题。您可以在您选择的任何level处停用硬件加速:

  • 应用
  • 活动
  • 窗口
  • 查看

干杯!

1 个答案:

答案 0 :(得分:4)

嗯,你只需要一个浮雕效果,所以你应该画一个形状。

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

您只需使用以下方法定义Path对象: Path definition steps 首先定义3个RectF对象,它们是最左边圆形的边界框(想象它后面的圆圈),最右边的圆形和滑动的圆形: boxes definitions 您可能需要做一些额外的数学来确定用于box2的正确角度(它们取决于圆圈和整个矩形的相应大小)

祝你好运!