2012-01-22 4 views
1

LayerDrawableでShaderFactoryでDrawableを使用する際に問題があります。 2つのレイヤの代わりにすべて黒を表示しています(いずれも黒ではありません)。これは、drawable.getPaint()。setShader()を使用して静的シェーダを使用したときに機能しましたが、現在はShaderFactoryでは使用できません。LayerDrawableでShaderFactoryでdrawableを使用する

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

答えて

2

ShapeDrawableのシェイプを指定しなかったということがわかりました。

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

これまで変更されています。もう一つは、上から下に線形グラデーションを指定して、幅を必要としないようにしたいということでした。その効果によって気付かれませんでした。実際にPaintDrawableで描画することもできます。

+0

あなたは 'grad'の幅と高さを設定していません。だから、私は 'width'と' height'が 'resize()'メソッドにどのようなシステムを渡すのか不思議です。 – Solace

関連する問題