0
0

More than 3 years have passed since last update.

ちょっと凝ったローディングダイアログ作った

Posted at

作ったもの

android:indeterminateTint="@color/teal_200"

だと以下のようにちょっと白く欠けたようになるので、白い部分が消えるようにしてみた。

コード

LoadingDialogFragment

package com.example.sampleapp.ui

import android.app.Dialog
import android.os.Bundle
import androidx.appcompat.app.AppCompatDialogFragment
import com.example.sampleapp.R

class LoadingDialogFragment : AppCompatDialogFragment() {

    companion object {

        const val TAG = "LoadingDialogFragment"

        fun newInstance(): LoadingDialogFragment {

            val fragment = LoadingDialogFragment()
            fragment.arguments = Bundle().apply {

            }
            return fragment
        }
    }

    override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
/*      
        return activity?.let {
            val builder = AlertDialog.Builder(it)
            builder.setView(R.layout.gradient_loading_dialog)
            val dialog = builder.create()
            return dialog
        } ?: throw IllegalStateException("Activity cannot be null")
*/
        // 本当は上記コードの方が推奨されるけど、ダイアログの背景がちょうどいい大きさにならず下記コードで実装...
        val dialog = Dialog(requireContext())
        dialog.setContentView(R.layout.gradient_loading_dialog)
        return dialog
    }

}

layoutのxml


<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:background="@android:color/transparent"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">
    <!-- サイズは適当 -->
    <ProgressBar
        android:id="@+id/progressBar"
        style="@style/Widget.AppCompat.ProgressBar"
        android:background="@android:color/transparent"
        android:indeterminate="true"
        android:indeterminateDrawable="@drawable/loading_dialog_drawable"
        android:layout_width="60dp"
        android:layout_height="60dp"
        android:layout_margin="16dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

回転画像のdrawable


<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromDegrees="0"
    android:toDegrees="1000" >

    <shape
        android:innerRadius="20dp"
        android:shape="ring"
        android:thickness="4dp"
        android:useLevel="false" >

        <size android:width="60dp" android:height="60dp" />

        <gradient
            android:endColor="#d3d3d3"
            android:startColor="@color/teal_200"
            android:type="sweep"
            android:useLevel="false" />
    </shape>

</rotate>

まとめ

ローディングダイアログはデザインをある程度デザイナーさんが用意してくれたケースが多かったのですが、
今回標準にちょっとアレンジしたものを作ることがあったので備忘録に残します。

GithubにUPされているライブラリ使えるといいかもしれませんが、
コード量がちょっとだったので(ライブラリ使うと逆に微調整効かなくなりそうだったので)自作しました。

ベースにしたサイトがあったけどリンク失念....

0
0
0

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
0
0