Я использую пользовательский индикатор выполнения для горизонтального индикатора выполнения в приложении Android.Это двухуровневый рисовальный ящик.Первый слой - изображение в полоску по диагонали с tileMode="repeat"
.Второй слой добавляет тень над полосами.Вот как выглядит отрисовка progress_bar_horizont.xml:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@android:id/progress">
<clip>
<layer-list>
<item>
<bitmap android:src="@drawable/diagonal_stripes_0" android:tileMode="repeat" />
</item>
<item>
<nine-patch android:src="@drawable/inset_shadow" />
</item>
</layer-list>
</clip>
</item>
</layer-list>
Этот отрисовка используется в теме для рестайлинга элемента управления индикатора выполнения:
<style name="Theme.Custom" parent="android:Theme.Light">
<item name="android:progressBarStyleHorizontal">@style/Widget.ProgressBar.Horizontal.Custom</item>
</style>
<style name="Widget.ProgressBar.Horizontal.Custom" parent="android:Widget.ProgressBar.Horizontal">
<item name="android:background">@drawable/bg_inset_gray</item>
<item name="android:progressDrawable">@drawable/progress_bar_horizontal</item>
<item name="android:indeterminateDrawable">@drawable/progress_bar_indeterminate_horizontal</item>
</style>
Идея состоит в том, чтобы сделать диагонально-полосатый индикатор выполнения, который не растягивается, но увеличивается в ширине по мере выполнения операции.Вот почему используется <clip>
.
В большинстве случаев работает нормально.Однако время от времени (без каких-либо шансов воспроизвести специально) он начинает растягивать один фрагмент рисунка вместо того, чтобы соответствующим образом его обрезать.
Приложение разработано с android:minSdkVersion="7"
и работает на HTC Desire с Android2.2.
Буду признателен за любую помощь.