読者です 読者をやめる 読者になる 読者になる

woshidan's blog

そんなことよりコードにダイブ。

ProgressBarの色をカスタマイズ

stackoverflow.com

ProgressBar | Android Developers

http://developer.android.com/intl/ja/guide/topics/ui/dialogs.html#ShowingADialog

メモ

  • styleはhorizontalBarと書いてあるもの以外、全部円。大きさや回転方向が違う。
  • ダウンロード時などに出てくることが多い、NotificationのものはNotification#setProgressで呼び出すとつくもので、これとは別物。
  • ProgressDialogという途中でキャンセル等の操作を用意したダイアローグ専用のものもあるらしい(こっちはまだ試してない)。

コード

<!-- レイアウト -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    tools:context=".MainActivity">

    <ProgressBar
        style="?android:attr/progressBarStyleLarge"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/progressBar"
        android:max="100"
        android:indeterminate="true"
        android:indeterminateDrawable="@drawable/circular_progress"
        android:layout_gravity="center_horizontal" />

    <ProgressBar
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="100dp"
        android:layout_height="5dp"
        android:id="@+id/progressBar2"
        android:progress="55"
        android:secondaryProgress="75"
        android:background="#ccc"
        android:max="100"
        android:progressDrawable="@drawable/horizontal_progress"
        android:layout_gravity="center_horizontal" />

    <ProgressBar
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_marginTop="5dp"
        android:layout_width="100dp"
        android:layout_height="5dp"
        android:id="@+id/progressBar3"
        android:background="#ccc"
        android:indeterminate="true"
        android:indeterminateDrawable="@drawable/horizontal_progress"
        android:indeterminateBehavior="cycle"
        android:layout_gravity="center_horizontal" />

    <ProgressBar
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_marginTop="5dp"
        android:layout_width="100dp"
        android:layout_height="5dp"
        android:id="@+id/progressBar4"
        android:background="#ccc"
        android:indeterminate="true"
        android:indeterminateDrawable="@drawable/horizontal_progress"
        android:indeterminateBehavior="repeat"
        android:layout_gravity="center_horizontal" />
</LinearLayout>
<!-- circular_progress -->
<?xml version="1.0" encoding="utf-8"?>
<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" >
        <size
            android:height="76dip"
            android:width="76dip" />

        <gradient
            android:angle="0"
            android:endColor="#ff99aa"
            android:startColor="#99ffffff"
            android:type="sweep"
            android:useLevel="false" />
    </shape>
</rotate>
<!-- horizontal_progress -->
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >

<item android:id="@android:id/secondaryProgress">
    <clip>
        <shape>
            <corners android:radius="5dip" />
            <solid android:color="#ff9999" />
        </shape>
    </clip>
</item>
<item android:id="@android:id/progress">
    <clip>
        <shape>
            <corners android:radius="5dip" />

            <solid android:color="#aa0000" />
        </shape>
    </clip>
</item>

</layer-list>

動作

f:id:woshidan:20151120082741g:plain