Почему этот аргумент конструктора LinearGradient не работает?
Я хочу установить пользовательский объект рисования с линейным градиентом в качестве фона для панели в моем SeekBar
, Я создаю LinearGradient во втором утверждении в следующем фрагменте, и делаю это так:
// Creating the drawable:
ShapeDrawable shapeDrawable = new ShapeDrawable(new RectShape());
Shader linearGradientShader = new LinearGradient(0, 0, 300, 20, new int[] { Color.RED, Color.BLUE },
new float[] { 0, 1 }, Shader.TileMode.CLAMP);
shapeDrawable.getPaint().setShader(linearGradientShader);
shapeDrawable.setBounds(10, 10, 300, 30);
seekBar.setProgressDrawable(shapeDrawable);
Проблема здесь в том, что, согласно спецификации, 6-й параметр определяется как
Может быть нулевым Относительные позиции [0..1] каждого соответствующего цвета в массиве цветов. Если это значение равно нулю, цвета распределяются равномерно по линии градиента.
Я хотел, чтобы красный и синий цвета были распределены равномерно, то есть половина формы должна выглядеть красноватой, а половина - голубоватой (как на следующем рисунке).
Так я попробовал null
, new float[] {0, 0.5f}
, а также new float[] {0, 1}
в качестве значений 6-го аргумента. Я получил следующие три результата соответственно.
Покажите, где я иду не так? Как мне это исправить?
1 ответ
Использование
ShapeDrawable#setShaderFactory(фабрика ShapeDrawable.ShaderFactory)
у фабрики есть метод Shader resize(int width, int height)
который вызывается каждый раз, когда изменяются ваши нарисованные границы, и это место, где вы должны вернуть свои LinearGradient
шейдер на основе width
/ height
параметры
как вы увидите, теперь вы можете просто передать NULL positions
и цвета будут распределяться равномерно