Android - как изменить цвет горизонтального индикатора выполнения без потери анимации

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

Итак, у меня есть горизонтальный индикатор выполнения, я продолжаю писать / обновлять индикатор выполнения один, то есть устанавливаю прогресс на один, затем на два (до 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. Если это невозможно, значит ли это, что я должен делать свою собственную анимацию? Если да, может ли кто-нибудь дать мне отрывок о том, как создать собственную анимацию, имитирующую индикатор выполнения?


person user1118019    schedule 24.02.2012    source источник


Ответы (1)


Отображаемый индикатор выполнения должен иметь два элемента с идентификаторами «background» и «progress», возможно третий, «secondaryProgress». Взгляните, что здесь: 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.

person cermak.cz    schedule 22.10.2012