Как программно установить TopLeftRadius и BottomLeftRadius для GradientDrawable в Android
У меня есть ShapeDrawable . Я хочу установить CornerRadius (TopLeftRadius & BottomLeftRadius) программно.
Ниже мой xml
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:top="5dp"
android:bottom="5dp">
<shape android:shape="rectangle">
<corners android:topLeftRadius="20dp"
android:bottomLeftRadius="20dp"/>
<solid android:color="#A2D368"/>
</shape>
</item>
</layer-list>
3 ответа
Решение
Делай как это;
float mRadius=3f;
GradientDrawable drawable=new GradientDrawable();
drawable.setShape(GradientDrawable.RECTANGLE);
drawable.setCornerRadii(new float[]{mRadius, mRadius, 0, 0, 0, 0, mRadius, mRadius});
для более подробной информации нажмите здесь
Использовать
setCornerRadii (float[] radii)
метод GradientDrawable.
Обычно этот метод принимает массив с плавающей запятой размером 8.
Для каждого из 4 углов необходимо 2 значения радиусов x радиусов и y радиусов.
Углы упорядочены вверх-слева, вверху-справа, внизу-справа, внизу-слева в массиве с плавающей запятой.
Поскольку вы запросили верхний и нижний левый радиус, вам необходимо установить значение радиуса равным первым 2 и последним 2 индексам массива с плавающей запятой.
образец ->
setCornerRadii(new float[]{50, 50, 0, 0, 0, 0, 50, 50})
<shape android:shape="rectangle">
<corners
android:topLeftRadius="@dimen/button_radius"
android:topRightRadius="0dp"
android:bottomLeftRadius="0dp"
android:bottomRightRadius="@dimen/button_radius"/>
<stroke
android:width="@dimen/button_stroke_width"
android:color="@color/colorBlack"/>
<gradient
android:angle="-90"
android:startColor="@color/colorLightPurple"
android:endColor="@color/colorDeepPurple" />
</shape>