Сегодня мы будем кастомизировать элемент «Spinning Wheel», или «барашек». В этой
статье будут раскрыты 3 способа изменения этого элемента.
Практика
Для одного из способов
кастомизации потребуются ресурсы. Создайте xml файл для цвета. Эти ресурсы будут
задавать градиент для нашего «барашка».
Исходный код (colors.xml)
<resources>
<color name="color_preloader_start">#000000</color>
<color name="color_preloader_center">#000000</color>
<color name="color_preloader_end">#ff56a9c7</color>
</resources>
- Первый способ. С помощью Shape
Создание форм для вращения ограничивается только вашей
фантазией. В этой статье будут расмотрены только две формы: овал и кольцо
1. Овальный «барашек»:
Исходный код (loader_0_1.xml)
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromDegrees="0"
android:pivotX="50%"
android:pivotY="50%"
android:toDegrees="360" >
<shape android:shape="oval" >
<gradient
android:centerColor="@color/color_preloader_center"
android:centerY="0.50"
android:endColor="@color/color_preloader_end"
android:startColor="@color/color_preloader_start"
android:type="sweep" />
</shape>
</rotate>
rotate позволяет
нашей форме вращаться от 0 до 360 градусов с точкой вращения в центре фигуры.
Наша фигура заливается развернутым градиентом (sweep gradient). Градиент задается
тремя цветами и начинает заливаться в центре фигуры.
2. «Барашек» в виде
кольца:
Исходный код (loader_0.xml)
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromDegrees="0"
android:pivotX="50%"
android:pivotY="50%"
android:toDegrees="360" >
<shape
android:innerRadiusRatio="3"
android:shape="ring"
android:thicknessRatio="8"
android:useLevel="false" >
<gradient
android:centerColor="@color/color_preloader_center"
android:centerY="0.50"
android:endColor="@color/color_preloader_end"
android:startColor="@color/color_preloader_start"
android:type="sweep"
android:useLevel="false" />
</shape>
</rotate>
Для кольца необходимо
задать следующие параметры:
android:innerRadiusRatio – внутренний радиус кольца
android:thicknessRatio – толщина кольца
android:useLevel="false" –
исключить влияние изображения на отрисовку градиента.
- Второй способ: Вращение изображения
Данный способ использует
подготовленное заранее изображение для его вращения.
Пример изображений (скачать):
Исходный код (loader_1.xml)
<animated-rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/preloader"
android:pivotX="50%"
android:pivotY="50%" />
- Третий способ: Покадровая анимация
Пример изображений (скачать):
В том случае, когда наш «барашек» невозможно анимировать с помощью вращения, можно использовать покадровую анимацию.
Замечание: размер
элемента должен быть равен или больше используемых изображений.
Исходный код (loader_2.xml)
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
>
<item
android:drawable="@drawable/progress_1"
android:duration="200"/>
<item
android:drawable="@drawable/progress_2"
android:duration="200"/>
<item
android:drawable="@drawable/progress_3"
android:duration="200"/>
<item
android:drawable="@drawable/progress_4"
android:duration="200"/>
<item
android:drawable="@drawable/progress_5"
android:duration="200"/>
</animation-list>
android:duration – время отображения
текущего кадра.
Теперь разместим все
наши элементы на экране. Чтобы кастомизировать ProgressBar, необходимо использовать атрибут android:indeterminateDrawable.
Исходный код (main.xml)
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<ProgressBar
android:layout_width="100dp"
android:layout_height="100dp"
android:indeterminateDrawable="@drawable/loader_0"
/>
<ProgressBar
android:layout_width="100dp"
android:layout_height="100dp"
android:indeterminateDrawable="@drawable/loader_0_1"
/>
<ProgressBar
android:layout_width="100dp"
android:layout_height="100dp"
android:indeterminateDrawable="@drawable/loader_1"
/>
<ProgressBar
android:layout_width="119dp"
android:layout_height="119dp"
android:indeterminateDrawable="@drawable/loader_2"
/>
</LinearLayout>
Ссылки по теме
- Исходные коды данного проекта можно скачать отсюда: zip
Комментариев нет:
Отправить комментарий