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. 실행 예시
'안드로이드 > 안드로이드_java' 카테고리의 다른 글
안드로이드 Retrofit2 적용 및 스프링 서버 데이터 통신 구축 (0) | 2022.04.08 |
---|---|
FCM Push(Firebase 기반) 알림 메시지 만들기 (0) | 2022.03.24 |
상태표시줄 알림 만들기 (0) | 2022.03.24 |
커스텀 다이얼로그 만들기 (0) | 2022.03.24 |
디스플레이 메시지(toast) 만들기 (안드로이드 10버전 이후) (0) | 2022.03.21 |