在LayerDrawable中使用drawable和ShaderFactory

时间:2012-01-22 20:19:57

标签: android

我在LayerDrawable中使用带有ShaderFactory的Drawable时遇到问题。它显示所有黑色而不是两个层(其中没有一个都应该全黑)。当我使用drawable.getPaint()。setShader()时使用静态着色器时,它有效,但现在不使用ShaderFactory。

ShapeDrawable.ShaderFactory sf = new ShapeDrawable.ShaderFactory() {
    @Override
    public Shader resize(int width, int height) {
        Log.d("shader", width+"x"+height);
        LinearGradient gradient = new LinearGradient(0, 0, width, height, 
            new int[] { 0x33FF0000, 0x00000000, 0x00000000, 0x11000000 }, 
            new float[] { 0.0f, 0.04f, 0.97f, 1.0f }, Shader.TileMode.CLAMP);
        return gradient;
    }
};
ShapeDrawable grad = new ShapeDrawable();
grad.setShaderFactory(sf);
Drawable[] layers = new Drawable[] { anotherDrawable, grad };
Drawable d = new LayerDrawable(layers);
someImageView.setImageDrawable(d);

1 个答案:

答案 0 :(得分:2)

事实证明问题是我没有指定ShapeDrawable的形状。

ShapeDrawable grad = new ShapeDrawable(new RectShape());

改为此,现在很好。另一件事是我实际上想要从上到下指定线性渐变,所以我不需要宽度,效果让我没有注意到它。所以实际上用PaintDrawable绘制它也有效。