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

    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);
    }

图像:
然后我加了一个浮雕滤镜
    paintEmboss = new EmbossMaskFilter(new float[] { 1, 1, 1 }, 0.1f, 8f, 5f);
    woodPaint.setMaskFilter(paintEmboss);

图像:
如您所见,浮雕遮罩分别应用于两个形状。如何组合形状并将浮雕应用于整个对象?我已经尝试过将xfer模式设置为某种风格的porter duff,但这不会影响将浮雕遮罩分别应用于每个形状的事实。
谢谢你的帮助!
编辑:
如orab_g所示,您必须使用已设置浮雕过滤器的油漆绘制一条路径。注意:setmaskfilter()方法是在启用硬件加速时不起作用的少数方法之一。通过禁用活动的硬件加速,我解决了一个运行jelly bean的手机的问题。您可以在选择的任何level位置禁用硬件加速:
应用程序活动窗口视图
干杯!

最佳答案

好吧,你只需要一个浮雕效果,所以你应该画一个形状。
所以应该使用canvas.drawPath()方法。
您只需使用以下方法定义路径对象:
首先定义3个rectf对象,这将是最左边的圆(想象它后面的圆)、最右边的圆和滑动的圆的边界框:
您可能需要做一些额外的数学运算来确定box2要使用的正确角度(它们取决于圆和整个矩形的各自大小)
祝你好运!

07-24 09:21