Полоса хода с закругленными углами?
Я пытаюсь достичь этого шага разработки:
![введите описание изображения здесь]()
В текущем коде, который я создаю:
![введите описание изображения здесь]()
Это код:
<item android:id="@android:id/background">
<shape>
<corners android:radius="8dp"/>
<solid android:color="@color/dirtyWhite"/>
</shape>
</item>
<item android:id="@android:id/progress">
<clip>
<shape>
<corners android:radius="8dp"/>
<solid android:color="@color/colorPrimaryDark"/>
</shape>
</clip>
</item>
Мой индикатор выполнения:
<ProgressBar
android:id="@+id/activeProgress"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="300dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:progress="10"
android:progressDrawable="@drawable/rounded_corners_progress_bar"/>
Я попробовал добавить атрибут <size>
в <shape>
в <clip
, чтобы сделать шаг прогресса немного меньше, но он не сработал. Кроме того, индикатор выполнения является плоским, и я хочу быть изогнутым по дизайну. Что мне нужно изменить для достижения дизайна?
Ответы
Ответ 1
Как сделать размер хода немного меньше?
Вам нужно указать элемент прогресса немного, например:
<item android:id="@android:id/progress"
android:top="2dp"
android:bottom="2dp"
android:left="2dp"
android:right="2dp">
Как сделать индикатор выполнения изогнутым по дизайну?
Замените элемент <clip></clip>
, <scale android:scaleWidth="100%"></scale>
. Это заставит форму сохранить свою форму по мере ее роста, а не отрезать.
К сожалению, вначале у него будет немного нежелательного визуального эффекта, поскольку в углах формы недостаточно места для рисования. Но для большинства случаев это может быть достаточно.
Полный код:
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@android:id/background">
<shape>
<corners android:radius="8dp"/>
<solid android:color="@color/dirtyWhite"/>
</shape>
</item>
<item android:id="@android:id/progress"
android:top="1dp"
android:bottom="1dp"
android:left="1dp"
android:right="1dp">
<scale android:scaleWidth="100%">
<shape>
<corners android:radius="8dp"/>
<solid android:color="@color/colorPrimaryDark"/>
</shape>
</scale>
</item>
</layer-list>
Ответ 2
Спасибо Георгию Коемджиеву за хороший вопрос и изображения. Для тех, кто хочет сделать подобное его, сделайте следующее.
1) Создайте фон для ProgressBar
.
progress_bar_background.xml:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle"
>
<corners android:radius="3dp" />
<stroke android:color="@color/white" android:width="1dp" />
</shape>
2) Создайте шкалу для ProgressBar
.
curved_progress_bar.xml:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@android:id/background">
<shape>
<corners android:radius="2dp" />
<solid android:color="@color/transparent" />
</shape>
</item>
<item android:id="@android:id/progress">
<clip>
<shape>
<corners android:radius="2dp" />
<solid android:color="#ffff00" />
</shape>
</clip>
</item>
</layer-list>
3) В файл макета добавьте ProgressBar
.
<FrameLayout
android:layout_width="match_parent"
android:layout_height="6dp"
android:layout_marginStart="20dp"
android:layout_marginTop="10dp"
android:layout_marginEnd="20dp"
android:background="@drawable/progress_bar_background"
>
<ProgressBar
android:id="@+id/progress_bar"
style="@style/Widget.AppCompat.ProgressBar.Horizontal"
android:layout_width="match_parent"
android:layout_height="4dp"
android:layout_margin="1dp"
android:indeterminate="false"
android:progressDrawable="@drawable/curved_progress_bar"
/>
</FrameLayout>
Ответ 3
Вы можете получить индикатор выполнения как с внутренним цветом выполнения, цветом границы, так и с прозрачным цветом.
<item android:id="@android:id/secondaryProgress">
<clip>
<shape>
<corners android:radius="5dip" />
<gradient
android:startColor="@color/black"
android:centerColor="@color/trans"
android:centerY="0.75"
android:endColor="@color/black"
android:angle="270"
/>
</shape>
</clip>
</item>
<item
android:id="@android:id/progress"
>
<clip>
<shape>
<corners
android:radius="5dip" />
<gradient
android:startColor="@color/black"
android:endColor="@color/black"
android:angle="270" />
</shape>
</clip>
</item>
</layer-list>