Используйте drawable с ShaderFactory в LayerDrawable

1

У меня возникли проблемы с использованием Drawable с ShaderFactory в LayerDrawable. Он показывает все черные, а не два слоя (ни один из которых не должен быть черным). Он работал, когда я использовал статический шейдер, используя 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 ответ

2
Лучший ответ

Оказывается, проблема заключалась в том, что я не указывал форму ShapeDrawable.

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

Это изменилось, и теперь это хорошо. Другое дело, что я действительно хотел указать линейный градиент сверху вниз, поэтому мне не нужна ширина, и эффект заставляет меня этого не заметить. Таким образом, на самом деле работает и его рисование с помощью PaintDrawable.

  • 0
    Эй, вы не установили ширину и высоту grad . Поэтому мне интересно, какую width и height система передает методу resize() .

Ещё вопросы

Сообщество Overcoder
Наверх
Меню