Как применить закругленный угол к виду на основе его ширины в Android Kotlin - PullRequest
3 голосов
/ 20 сентября 2019

Я работаю над пользовательским индикатором выполнения, как на фотографиях ниже:

enter image description here

enter image description here

enter image description here

По сути, я создал фоновый XML-файл для рисования:

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid
        android:color="@color/jungleGreen"/>
    <corners
        android:bottomLeftRadius="40dp"
        android:topLeftRadius="40dp"/>
</shape>

Затем применил его к используемому представлению:

<View
            android:id="@+id/progress_bar_placeholder_view"
            android:layout_width="match_parent"
            android:layout_height="30dp"
            android:layout_marginEnd="45dp"
            android:background="@drawable/background_filled_patronage_progressbar"
            app:layout_constraintTop_toTopOf="parent"/>

Это совершенно нормально, и я могу достичь сценария 1 и 2, но когда полоса становится ближе к концу, как я могу программно установить закругленный угол для верхней правой и нижней правой части видапока это не будет похоже на фото 3?

Спасибо.

Ответы [ 2 ]

2 голосов
/ 20 сентября 2019

попробуйте

    public static void customView(View v, int backgroundColor, int borderColor)
 {
            GradientDrawable shape = new GradientDrawable();
            shape.setShape(GradientDrawable.RECTANGLE);
            shape.setCornerRadii(new float[] { 8, 8, 8, 8, 0, 0, 0, 0 });
            shape.setColor(backgroundColor);
            shape.setStroke(3, borderColor);
            v.setBackground(shape);
        }

Источник: Как программно создать фон для фигуры Android?

0 голосов
/ 22 сентября 2019

Решение Мадхава работает для меня, так что в основном мне нужно будет передать ширину вида, затем вычислить число угловых радиусов и поместить его в градиентDrawable, как показано ниже:

    private fun setupGraphBackground(view: View, graphWidth: Int) {
            val gradientDrawable = GradientDrawable()
            gradientDrawable.shape = GradientDrawable.RECTANGLE
            gradientDrawable.setColor(resources.getColor(R.color.jungleGreen))
            gradientDrawable.setStroke(0, null)
            gradientDrawable.cornerRadii = floatArrayOf(45f, 45f, 
                graphWidth * calculationRules, graphWidth * calculationRules, 
                graphWidth * calculationRules, graphWidth * calculationRules, 
                45f, 45f)
            view.background = gradientDrawable
        }

Где, какПравило, которое я хочу, чтобы я мог получить правильный радиус углов topRight и bottomRight.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...