2017-02-16 17 views
0

Я пытаюсь установить градиент на мою панель инструментов, но кажется, что setSize и setGradientCenter не работают.GradientDrawable создан программно: setSize и setGradientCenter методы не работают

Мне нужно создать его динамически, потому что центр и высота градиента меняются в зависимости от значений, которые я получаю от CMS, но я не могу выполнить эту работу. Независимо от того, какие значения я задал для размера и центра, градиент всегда получает размер всей панели инструментов, а центр - по умолчанию.

Я попытался вызвать mutate() сначала, как говорится в документации, без результата. Также попробовал setBounds с тем же результатом

GradientDrawable gradientDrawable = new GradientDrawable(); 
     gradientDrawable.setOrientation(gradientData.getOrientation()); 
     gradientDrawable.setColors(gradientData.getColors()); 
     gradientDrawable.setGradientCenter(gradientData.getCenterX(), gradientData.getCenterY()); 

toolbar.setBackground(gradientDrawable); 

Я что-то упустил? Ориентация всегда линейна, если это имеет значение

+0

использования 'ClipDrawable', если все, что вы хотите, чтобы отсечь другой Drawable делает его шире/короче, в зависимости от текущего уровня – pskink

+0

@pskink Я не хочу, чтобы закрепить его , потому что у меня не было бы всего градиента, если я это сделаю. Например, если у меня есть конечный цвет, я даже не увижу его, если я его закрою. Я просто хочу, чтобы градиент был короче или изменил центр так, чтобы эффект градиента заканчивался раньше – moyo

+0

, поэтому используйте 'ScaleDrawable': * A Drawable, который изменяет размер другого Drawable на основе его текущего значения уровня * – pskink

ответ

1

Я оставлю здесь код в случае, если это полезно для кого-либо еще.

Благодаря примеру @pskink он работает с использованием ScaleDrawable. Теперь я могу установить меньший градиент к моей панели инструментов:

int[] colors = { 
     Color.RED, Color.YELLOW, Color.RED 
}; 

Drawable gd = new GradientDrawable(GradientDrawable.Orientation.TOP_BOTTOM, colors); 
final Drawable sd = new ScaleDrawable(gd, Gravity.TOP, 0, 1); 
sd.setLevel(7500); 

toolbar.setBackground(sd);