2012-01-22 3 views
1

У меня возникли проблемы с использованием Drawable с ShaderFactory в LayerDrawable. Он показывает все черные, а не два слоя (ни один из которых не должен быть черным). Он работал, когда я использовал статический шейдер, используя drawable.getPaint(). SetShader(), но не теперь с ShaderFactory.Использование drawable с ShaderFactory в LayerDrawable

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

Смежные вопросы