1

ドローアブルのメソッドを使用しShapeDrawableてカスタムを含むを埋めるのに問題があります。次のコードは、 を描画するときに完全に機能します。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ただし、を任意の customに変更するとPathShape、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 に答える