Loading 다이얼로그 만들기

1. 다이얼로그 창에 들어갈 이미지 생성

   - 이미지 저작권 문제도 있으니, 안드로이드 Image Asset을 통해 생성

   - drawable > ic_loading_foreground.xml

<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="108dp"
    android:height="108dp"
    android:viewportWidth="41.37931"
    android:viewportHeight="41.37931"
    android:tint="#FFFFFF">
  <group android:translateX="8.689655"
      android:translateY="8.689655">
      <path
          android:fillColor="#FF000000"
          android:pathData="M19.1,12.9a2.8,2.8 0,0 0,0.1 -0.9,2.8 2.8,0 0,0 -0.1,-0.9l2.1,-1.6a0.7,0.7 0,0 0,0.1 -0.6L19.4,5.5a0.7,0.7 0,0 0,-0.6 -0.2l-2.4,1a6.5,6.5 0,0 0,-1.6 -0.9l-0.4,-2.6a0.5,0.5 0,0 0,-0.5 -0.4H10.1a0.5,0.5 0,0 0,-0.5 0.4L9.3,5.4a5.6,5.6 0,0 0,-1.7 0.9l-2.4,-1a0.4,0.4 0,0 0,-0.5 0.2l-2,3.4c-0.1,0.2 0,0.4 0.2,0.6l2,1.6a2.8,2.8 0,0 0,-0.1 0.9,2.8 2.8,0 0,0 0.1,0.9L2.8,14.5a0.7,0.7 0,0 0,-0.1 0.6l1.9,3.4a0.7,0.7 0,0 0,0.6 0.2l2.4,-1a6.5,6.5 0,0 0,1.6 0.9l0.4,2.6a0.5,0.5 0,0 0,0.5 0.4h3.8a0.5,0.5 0,0 0,0.5 -0.4l0.3,-2.6a5.6,5.6 0,0 0,1.7 -0.9l2.4,1a0.4,0.4 0,0 0,0.5 -0.2l2,-3.4c0.1,-0.2 0,-0.4 -0.2,-0.6ZM12,15.6A3.6,3.6 0,1 1,15.6 12,3.6 3.6,0 0,1 12,15.6Z"/>
  </group>
</vector>

 

2. 다이얼로그 창에 들어갈 배경 xml 생성

   - drawable > loading_dialog_backgound

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
    <solid android:color="#22ffffff"/>
    <corners android:radius="12dp"/>
    <stroke android:color="#22ffffff" android:width="1dp"/>
</shape>

 

3.  애니메이션을 추가할 xml 파일 생성

   - 해당 이미지가 360도 회전하는 xml 파일 생성

   - drawable > loading.xml

<?xml version="1.0" encoding="utf-8"?>
<animated-rotate
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/ic_loading_foreground"
    android:pivotX="50%"
    android:pivotY="50%">
</animated-rotate>

 

4. 로딩 팝업창을 구성할 layout 생성

   - layout > loading_dialog

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
   xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:orientation="vertical"
   android:padding="6dp"
   android:background="@drawable/loading_dialog_backgound" >
   <ProgressBar
      android:layout_width="360dp"
      android:layout_height="360dp"
      android:indeterminateDrawable="@drawable/loading" />
   <TextView
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:layout_gravity="center_vertical"
      android:text="Loading..."
      android:textStyle="bold"
      android:textColor="@android:color/white"
      android:textSize="80dp"
      android:gravity="center"/>
</LinearLayout>

 

5. 로딩 팝업 호출 시 불러올 다이얼로그 생성

   - dialog > LoadingDialog

package com.main.test.dialog;

import android.app.Dialog;
import android.content.Context;
import android.view.Window;

import com.main.test.R;

public class LoadingDialog extends Dialog {

    public LoadingDialog(Context context) {
        super(context);

        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.loading_dialog);

    }

}

 

6. Activity 파일에 선언 및 구성

//Activity 정의
public static Activity main;

//Activity 변수 정의
LoadingDialog loadingDg = null;

public void showLoadingDg() {

        //객체 생성 시 기존값 null 처리
        if(null != loadingDg) {
			loadingDg = null;

        }

        //다이얼로그 객체 생성
        loadingDg = new progressDialog(Activity.main);	//[Activity.main 부분은 개별 선언 처리하세요]
        
        //다이얼로그 반투명 처리
        loadingDg.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));

		//다이얼로그 생성 후 터치 시 사라지지 않도록 처리
		loadingDg.setCanceledOnTouchOutside(false);
        
        //다이얼로그 생성
        loadingDg.show();

		//핸들러 생성 (다이얼로그 생성 이후 자동 닫기 처리 부분 : 3000 = 3초)
        Handler hd = new Handler();

        hd.postDelayed(new Runnable() {
            @Override
            public void run() {
                if(null != customProgressDialog) {
					//다이얼로그 닫기
					loadingDg.dismiss();
                }

            }
            
        }, 3000);

    }
    
/*
    //Loading 다이얼로그 호출
    showLoadingDg();

    //로딩창 존재 시 닫아주기
    if(null != customProgressDialog) {
        customProgressDialog.dismiss();

    }
*/

 

7. 실행 예시