【正社員】還元率83%【フリーランス】マージン一律5万円で案件をご紹介させていただきます。 詳細はこちら

【Android】<Kotlin>ProgressBarで処理中に「くるくる(ローディング)」表示を実装する方法を徹底解説!

【Android】<Kotlin>ProgressBarで処理中に「くるくる(ローディング)」表示を実装する方法を徹底解説!
すだ

みなさまこんにちは〜!
メモリアインクのすだです。

本日は、
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):処理の進捗状況が明確な場合に進捗バーを表示。

今回はインデターミネート「くるくる回るローディング表示」を実装します。

【Android】<Kotlin>ProgressBarで処理中に「くるくる(ローディング)」表示を実装する方法を徹底解説!

デターミネート (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 を非表示にします。

ビルドしてみると…

【Android】<Kotlin>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=に指定の色をセットすることで、色を変更することできます。

【Android】<Kotlin>ProgressBarで処理中に「くるくる(ローディング)」表示を実装する方法を徹底解説!

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エンジニアを目指すなら【ユニゾンキャリア】
を通じて、
自分の市場価値をさらに向上させてみませんか?

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

弊社テックブログをご愛読いただきありがとうございます。
当テックブログを運用している株式会社メモリアインクは、
【正社員】還元率83%
【フリーランス】マージン一律5万円で案件のご紹介
と、エンジニアの皆様に分かりやすい形で稼げる仕組みを構築し提供させていただいております。詳しくは弊社お問い合わせページ、プロフィールのQRコードを読み取り、LINEメッセージでお問い合わせいただけますと幸いです。

コメント

コメントする

目次