1

我在使用可绘制的方法填充ShapeDrawable包含自定义的内容时遇到问题。以下代码在绘制 a 时完美运行:PathShapesetShaderFactory()RectShape

ShapeDrawable shape = new ShapeDrawable();
shape.setShape(new RectShape());
shape.setShaderFactory(new ShaderFactory() {
    @Override
    public Shader resize(int width, int height) {
        LinearGradient gradient = new LinearGradient (0, 0,
                width, height, Color.Red, Color.Blue,
                TileMode.REPEAT);
        return gradient;
    }
});

但是,当我将其更改RectShape为任何 customPathShape时,drawable 仅使用渐变起始颜色(红色)填充整个形状。换句话说,自定义形状绘制正确,但颜色完全错误。有没有人见过这个并且知道可能是什么问题?

4

1 回答 1

0

实验后发现渐变的大小一定是跟标准的宽度和标准的高度有关PathShape,在创建的时候和高度和宽度没有关系ShapeDrawable。这意味着您必须跟踪您PathShape在其整个生命周期中分配给您的标准宽度/高度ShapeDrawable,以防它被调整大小。

虽然有点不雅,但这里有一个解决方案:

public static final int STD_WIDTH = 20;
public static final int STD_HEIGHT = 20;

PathShape shape = new PathShape(myPath, STD_WIDTH,
        STD_HEIGHT);
ShapeDrawable drawable = new ShapeDrawable();
drawable.setShape(myPathShape);
drawable.setShaderFactory(new ShaderFactory() {
    @Override
    public Shader resize(int width, int height) {
        LinearGradient gradient = new LinearGradient (0, 0,
                STD_WIDTH, STD_HEIGHT, Color.Red, Color.Blue,
                TileMode.REPEAT);
        return gradient;
    }
});
于 2012-06-16T15:23:27.730 回答