Как программно установить 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>
Другие вопросы по тегам