みなさまこんにちは〜!
メモリアインクのすだです。
本日は、
KotlinのProgressBarを使用して特定の処理中に「くるくる(インジケータ)」を表示する方法を、
実際のコードを利用して徹底解説していきます!
この記事を読んでわかること…
・ProgressBarとは?
・インジケータの種類と特徴
・処理中にくるくる回るローディングを表示する方法
環境
- Kotlin (ver 1.9.0)
- Android Studio (Giraffe | 2022.3.1 Patch 3)
ProgressBarとは?
「データ取得中」や「処理中」にユーザーに待ち時間を知らせるインジケータが必要になることがあります。
そんなときに便利なのが ProgressBar
です。
ProgressBar
は、Androidアプリで処理の進捗状況やロード中の状態をユーザーに伝えるためのUIコンポーネントで、特に非同期処理やネットワーク通信中に多用されます。
インジケータの種類と特徴
ProgressBar
には主に2種類の表示スタイルがあります。
- インデターミネート (Indeterminate):進捗が不明な場合に「くるくる」回る円形のローディングを表示。
- デターミネート (Determinate):処理の進捗状況が明確な場合に進捗バーを表示。
今回はインデターミネート「くるくる回るローディング表示」を実装します。
デターミネート (Determinate)の表示については、以下の記事でご紹介しておりますので
ぜひご覧ください!
ProgressBarを使った「くるくる回るローディング表示」の実装方法
それでは早速実装していきましょう!
1. XMLレイアウトでProgressBarを定義する
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ProgressBar
android:id="@+id/progressBar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:visibility="gone"
style="?android:attr/progressBarStyleLarge" />
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="処理を開始"
android:layout_centerHorizontal="true"
android:layout_alignParentBottom="true"
android:layout_marginBottom="100dp"/>
</RelativeLayout>
</FrameLayout>
サンプルコードの解説
6行目:
<ProgressBar
というタグを使用することで、今回のクルクル表示を実現できます。
(visibility="gone"
で初期状態は非表示にします。)
12行目:
style="?android:attr/progressBarStyle"
は標準の円形インジケータを意味します。
そのほかのスタイル↓
progressBarStyleHorizontal
(水平方向のバー)progressBarStyleSmall
(小さめの円形)
2. ProgressBarを制御する
class MainActivity : AppCompatActivity() {
private lateinit var progressBar: ProgressBar
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
progressBar = findViewById(R.id.progressBar)
// ボタン押下でローディングを表示
val button: Button = findViewById(R.id.button)
button.setOnClickListener {
showLoading(true)
performLongTask()
}
}
// ProgressBarの表示・非表示
private fun showLoading(isLoading: Boolean) {
progressBar.visibility = if (isLoading) View.VISIBLE else View.GONE
}
// 疑似的な長時間処理
private fun performLongTask() {
Handler(Looper.getMainLooper()).postDelayed({
showLoading(false)
}, 3000) // 3秒後に非表示
}
}
サンプルコードの解説
24〜28行目:
Handler
とpostDelayed
を使って、3秒後にProgressBar
を非表示にします。Handler(Looper.getMainLooper())
は、UIスレッドで遅延処理を実行する仕組みです。3000
ミリ秒 (3秒) 後にshowLoading(false)
を呼び出し、ProgressBar
を非表示にします。
ビルドしてみると…
ボタン押下でローディングのアニメーションが表示されました!
「くるくる回るローディング表示」の非表示とタイミング制御
処理が完了したタイミングでProgressBarを消す方法はいくつかあります。
- 非同期処理が終了したら消す
- コールバックを使ってタイミングを合わせる
- ネットワーク通信が終わったら非表示にする
非同期処理の例▼
fun fetchData() {
showLoading(true)
GlobalScope.launch {
delay(3000) // 3秒の処理
withContext(Dispatchers.Main) {
showLoading(false)
}
}
}
カスタマイズ方法
ProgressBarの色やサイズも、簡単に変更することができます。
1. バーの色を変更する方法
<ProgressBar
android:id="@+id/progressBar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:indeterminateTint="@color/purple_500" />
android:indeterminateTint=
に指定の色をセットすることで、色を変更することできます。
2. バーのサイズを変更する方法
<ProgressBar
android:id="@+id/progressBar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="?android:attr/progressBarStyleSmall"/>
以下のように設定することで、大きさを変更します。
style="?android:attr/progressBarStyleLarge"
:大サイズstyle="?android:attr/progressBarStyle"
:通常サイズstyle="?android:attr/progressBarStyleSmall"
:小サイズstyle="?android:attr/progressBarStyleLargeInverse"
:大サイズ(反転色)style="?android:attr/progressBarStyleSmallInverse"
:小サイズ(反転色)
まとめ
おつかれさまでした。いかがでしたでしょうか!
処理に待ち時間が発生する場合は、このProgressBarを利用してアニメーション表示することで
よりリッチなアプリに仕上がりそうですね。
ぜひ覚えて、アプリ開発で試してみてくださいね〜!
技術者としてのキャリアパスを次のレベルへと進めたい皆様、
未経験からIT・Webエンジニアを目指すなら【ユニゾンキャリア】
自分の市場価値をさらに向上させてみませんか?
コメント