Android - как изменить цвет горизонтального индикатора выполнения без потери анимации - PullRequest
6 голосов
/ 25 февраля 2012

Во-первых, это , а не , дубликат вопроса "как изменить цвет индикатора выполнения", он решает мою проблему, но создает другой.

Итак, у меня есть горизонтальный индикатор выполнения, я продолжаю писать / обновлять индикатор выполнения один, т. Е. Установить прогресс на один, затем два (до 100), чтобы имитировать% завершения, это работает хорошо, если я изменить цвет. Однако, как вы знаете, на некоторых телефонах цвет ресурса по умолчанию для индикатора выполнения - зеленый, для некоторых - оранжевый, я хочу, чтобы цвет был зеленым на всех устройствах, поэтому в атрибуте индикатора выполнения я установил progressDrawable (рекомендуется по большинству ответов на Stackoverflow) к следующему xml файлу

 <?xml version="1.0" encoding="utf-8"?>
 <shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
 <corners android:radius="5dip" />
 <gradient
  android:startColor="#4CC417"
  android:centerColor="#4CC417"
  android:centerY="0.75"
  android:endColor="#4CC417"
  android:angle="270"
/>
</shape>

Если я сделаю так, чтобы индикатор выполнения теперь просто отображал весь прогресс (то есть конечный процент, 100), вы не увидите анимацию от 0 до любого процента.

  1. Есть ли способ просто изменить цвет по умолчанию для индикатора выполнения и при этом использовать анимацию по умолчанию?

  2. Если это невозможно, значит ли это, что я должен сделать свою собственную анимацию? Если да, может ли кто-нибудь дать мне фрагмент о том, как использовать собственную анимацию для имитации индикатора выполнения?

1 Ответ

1 голос
/ 22 октября 2012

У отображаемого индикатора выполнения должны быть два элемента с идентификаторами «background» и «progress», необязательно третий, «virtualProgress».Взгляните на то, что здесь: https://github.com/android/platform_frameworks_base/blob/master/core/res/res/drawable/progress_horizontal.xml

В вашем случае ничья будет выглядеть так:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:id="@android:id/background">
        <shape>
            <corners android:radius="5dip" />
            <gradient
                    android:startColor="#ff9d9e9d"
                    android:centerColor="#ff5a5d5a"
                    android:centerY="0.75"
                    android:endColor="#ff747674"
                    android:angle="270"
            />
        </shape>
    </item> 

    <item android:id="@android:id/progress">
        <clip>
            <shape>
                <corners android:radius="5dip" />
                <gradient
                        android:startColor="#4CC417"
                        android:centerColor="#4CC417"
                        android:centerY="0.75"
                        android:endColor="#4CC417"
                        android:angle="270"
                />
            </shape>
        </clip>
    </item>

</layer-list>

Также важен элемент «clip», потому что его использование возможнодля системы, чтобы обрезать форму "прогресса".Смотри http://developer.android.com/reference/android/graphics/drawable/ClipDrawable.html.

...