Есть задача создать такой backfround для элемента, чтобы там был stroke с градиентом, а также был закругленные края у этого элемента. Делать это нужно программно, так как цвет градиента будет меняться.
Как можно это сделать?
<?xml version="1.0" encoding="UTF-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="rectangle">
<corners android:radius="2dp"/>
<gradient
android:angle="360"
android:startColor="#543456"
android:endColor="#ff00b5"
android:type="linear" />
<size android:width="24dp"
android:height="24dp"/>
</shape>
</item>
<item
android:bottom="2dp"
android:left="2dp"
android:right="2dp"
android:top="2dp">
<shape android:shape="rectangle" >
<solid android:color="#fff" />
</shape>
</item>
Сделал вьюху для примера:
public class StackGradientView extends LinearLayout {
public StackGradientView(Context context) {
super(context);
init();
}
public StackGradientView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
init();
}
public StackGradientView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
private void init() {
setBackground(generateCoolDrawable(new int[]{Color.parseColor("#543456"), Color.parseColor("#ff00b5")}));
}
private Drawable generateCoolDrawable(int[] startEndGradient) {
GradientDrawable gd = new GradientDrawable(
GradientDrawable.Orientation.LEFT_RIGHT,
startEndGradient);
gd.setCornerRadius(20f);
GradientDrawable rectangle = new GradientDrawable();
rectangle.setShape(GradientDrawable.RECTANGLE);
rectangle.setColor(Color.WHITE);
Drawable[] layers = new Drawable[]{
gd,
rectangle
};
LayerDrawable layerDrawable = new LayerDrawable(layers);
layerDrawable.setLayerInset(1, 40, 40, 40, 40);
return layerDrawable;
}
public void changeColor() {
setBackground(generateCoolDrawable(new int[]{Color.parseColor("#ffffff"), Color.parseColor("#ff00cc")}));
}
}
Переделайте размеры чтобы из dp to px конвертировались.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Не могу понять, не применяется формат ячейки начиная с 44 строки
Как сделать так, чтобы после нажатия на кнопку создавалась форма?
Есть у меня флексбокс, внутри которого 2 блока(В одном форма, а в другом изображение)