LoginSignup
23
8

More than 5 years have passed since last update.

ProgressTimeLatchとは何なのか

Last updated at Posted at 2019-02-28

DroidKaigiのカンファレンスアプリのソースコードを見ていたら、 ProgressTimeLatch なるものが使われており、何だろうと思い調べてみると、色々と便利なやつだったので投稿します。

端的にいうと、プログレスバーなどを使っている時に起こるチラつきを、いい感じに制御してくれるやつでした。

ProgressTimeLatchとは

調べてみると、下記のツイートで紹介されたのが最初のようです。(おそらく)
Chris Banes氏と言えば、色々ライブラリを公開されており、お世話になった方も多いのではないかと思います。
https://twitter.com/chrisbanes/status/927928428539580416

ここで ContentLoadingProgressBar なるもの出てきますが、そもそも ProgressTimeLatchContentLoadingProgressBar の機能をどんなViewでも手軽に使えるように作られたもののようです。

ちなみに ContentLoadingProgressBar はSupport Libraryに入っているらしいです。(知らなかった…)
https://developer.android.com/reference/android/support/v4/widget/ContentLoadingProgressBar

どう便利なのか

アプリを作っていると、下記のようなことがあるかと思います。

  1. API通信などの非同期処理をする。
  2. 処理をしている間は、プログレスバーなどを表示して、処理中を表す。
  3. 処理が終了したら、プログレスバーなどを非表示にする。

あるあるの処理だと思います。

しかしながら、この処理の小さな問題として、APIの通信が一瞬で終わった場合は、プログレスバーの表示・非表示が一瞬で行われ、ユーザーとしては何かがチラついたように感じることがあるかと思います。

これをいい感じに制御してくれるのが ProgressTimeLatch というわけです。

使い方

かなりシンプルなクラスなので、ソースコードを読めばなんとなくわかるかと思いますが、軽く解説。
( ソースコードはこちら→ https://github.com/chrisbanes/tivi/commit/96e7cae7560ffd358b8c58c47267ed1024df53f6

class ProgressTimeLatch(
        private val delayMs: Long = 750,
        private val minShowTime: Long = 500,
        private val viewRefreshingToggle: ((Boolean) -> Unit)
)

コンストラクタは上記のような感じになっています。

delayMs
Viewを表示するまで遅延させる時間をセットします。

minShowTime
Viewの最低限の表示時間をセットします。

viewRefreshingToggle
Viewの表示・非表示のLambdaをセットします。

既存のコードに適用する場合は、こちらのdiffが参考になりそうです。対象のViewをラップするようにして、今まで表示・非表示を切り替えていたところで、 refreshing を切り替える形。

いい感じに制御してくれる例

下記のような場合を想定します。

ProgressTimeLatch(delayMs = 500, minShowTime = 500) {
 // ProgressBarの表示・非表示
}

・非同期処理が早く(100ms)終わった場合
 → delayMs より小さいのでProgressBarは表示されない(チラつかない)

・非同期処理がやや早く(600ms)終わった場合
 → delayMs より大きいのでProgressBarは表示される
 → minShowTime が残っているので、残り時間分表示して非表示になる(チラつかない)

・非同期処理が遅く(2000ms)終わった場合
 → delayMs より大きいのでProgressBarは表示される
 → delayMsminShowTime の合計以上なので、元の処理が終わったタイミングで非表示になる(チラつかない)

という感じです。便利!

まとめ

  • ProgressTimeLatch はチラつきをいい感じに制御してくれるやつだった
  • 使い方もシンプルなので、使っていきたい
23
8
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
23
8