KITCHEN DRINKER

主にAndroid開発メモとか

ProgressBarでちょっとハマった

こんなの作りたかった

残り時間を表すやーつ f:id:nyanyonin:20180207011618p:plainf:id:nyanyonin:20180207022038p:plain

うん。ProgressBarで作れそう…!とやってみた。

ProgressBarおさらい。

ProgressBar  |  Android Developers

種類

  • Determinate Progress:特定量の進行状況を表すときに用いる

f:id:nyanyonin:20180207012551p:plain

  • Indeterminate Progress(default):不特定量の進行状況を表すときに用いる

f:id:nyanyonin:20180207014004p:plain:w80 よく見るのはくるぐるぐるしてるやーつ

ハマったその1

ろくにdocument読まずに形で見てIndeterminate Progressだろうと実装してみて、数値とかそれっぽく書いて実行してみたら、

・・・・ぐるぐるし続ける…!?

じゃCustomView作るしか…?汗 と思ってたけど以下のようにDeterminate Progressで、背景の設定を円形にすれば良いらしい。

<ProgressBar
    style="?android:attr/progressBarStyleHorizontal"
    android:layout_width="36dp"
    android:layout_height="36dp"
    android:background="@drawable/bg_progress"★全体時間描画(グレーの部分)設定
    android:progressDrawable="@drawable/circle_progress"★残り時間の描画設定
    android:rotation="90"// 描画角度(最初は@drawable/circle_progressの中で設定していたがrecyclerViewの中でうまく動かない問題があったためこちらで指定)
    android:scaleX="-1"
    android:max="100"// MAX
    android:progress="40"// 進行値
    />

2つに分けずともprogressDrawablelayer-listで書いたものをいっぺんに指定することも可能。 だけど今回は色を時間に応じて変えたかったため分けた。

<!-- bg_progress.xmll -->
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="ring"
    android:thickness="5dp"// 線の太さ
    android:useLevel="false">
    <solid android:color="@color/gray" />
</shape>
<!-- circle_progress.xml -->
<shape
    android:shape="ring"
    android:thickness="5dp"
    android:useLevel="true">
    <solid android:color="@color/green" />
</shape>

ハマったその2

progressの色を時間に応じて変えたかったのでBindingAdapterprogressDrawableを設定してみたらなぜか動かない。。

結論、順番入れ替えたら動いた・・・。

<!-- うごかない -->
    android:progress="@{result.progress}"
    app:progressDrawable="@{result.progress}"
<!-- うごいた-->
    app:progressDrawable="@{result.progress}"
    android:progress="@{result.progress}"

うーーん。。これフォーマッターにかけると入れ替わっちゃうんですよね泣

<!-- ちなみにBindingAdapter使わず直指定だとうごく。。-->
    android:progress="@{result.progress}"
    android:progressDrawable="@drawable/circle_progress_green"

xmlじゃなくてプログラム上からも同様で、progressDrawableを設定後にprogressを設定しなきゃうまく反映されない模様。。

なのでProgressBar側の仕様ってことなのかな;時間ある時src追ってみます。

勿論ご存知の方いらっしゃれば教えてください🙏🙇