투케이2K

27. (AndroidStudio/android/java) ProgressDialog 사용해 원형 로딩 프로그레스 바 활성 실시 본문

Android

27. (AndroidStudio/android/java) ProgressDialog 사용해 원형 로딩 프로그레스 바 활성 실시

투케이2K 2021. 1. 28. 07:48

/* =========================== */

[ 개발 환경 설정 ]

개발 툴 : AndroidStudio

개발 언어 : java

/* =========================== */

/* =========================== */

[소스 코드]

 

// ====== [전역 변수 선언] ======
ProgressDialog progress_Dialog = null; //TODO 프로그레스 사용 위한 다이얼로그 선언
int progress_Value = 0; //TODO 기본 프로그레스값 표시



// ====== [프로그레스 로딩 시작 메소드 호출] ======
button.setOnClickListener(new View.OnClickListener() {
	@Override
	public void onClick(View v) {

		getProgressStart(); //TODO 프로그레스 활성 메소드 호출

	}
});



// ====== [프로그레스 로딩 시작 메소드] ======
public void getProgressStart(){
	//TODO 타이틀 및 내용 표시
	String Tittle = "Please Wait ... ";
	String Message = "잠시만 기다려주세요 ... ";

	//TODO 버튼 이름 정의
	String buttonNo = "종료";
	String buttonYes = "확인";

	progress_Dialog = new ProgressDialog(A_Main.this);
	progress_Dialog.setTitle(Tittle); //TODO 타이틀 메시지 표시
	progress_Dialog.setIcon(R.drawable.circle_img); //TODO 아이콘 표시
	//progress_Dialog.setMessage(Message); //TODO 메시지 표시
	progress_Dialog.setCancelable(false); //TODO 창 안닫힘 설정
	//progress_Dialog.setProgressPercentFormat(null); //TODO 프로그레스 진행 퍼센트 안보임 설정
	//progress_Dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); //TODO 프로그레스 가로 막대 진행 표시 설정
	progress_Dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); //TODO 프로그레스 원형 표시 설정
	progress_Dialog.setMax(100); //TODO 프로그레스 Max값 설정 (디폴트 100 설정)
	progress_Dialog.setButton(DialogInterface.BUTTON_NEGATIVE, buttonNo,
			new DialogInterface.OnClickListener() {
				@Override
				public void onClick(DialogInterface dialog, int which) {
					Toast.makeText(getApplication(),"종료 합니다 ... ",Toast.LENGTH_SHORT).show();
					getProgressStop(); //종료 메소드 호출
				}
			});
	progress_Dialog.setButton(DialogInterface.BUTTON_POSITIVE, buttonYes,
			new DialogInterface.OnClickListener() {
				@Override
				public void onClick(DialogInterface dialog, int which) {
					Toast.makeText(getApplication(),"진행 중입니다 ... ",Toast.LENGTH_SHORT).show();
					getProgressStop(); //종료 메소드 호출
				}
			});
	progress_Dialog.show();

	ProgressHandler.sendEmptyMessage(0); //TODO 동적 UI 변경을 위해 핸들러 호출
}
Handler ProgressHandler = new Handler() {
	public void handleMessage(Message msg) {
		//==== [주기적으로 처리할 작업] ====
		if(progress_Value >= 100){ //TODO 프로그레스 로딩 완료 시 처리
			progress_Dialog.setProgress(progress_Value);
			getProgressStop();
		}
		else{ //TODO 프로그레스 로딩 중일 경우
			progress_Dialog.setProgress(progress_Value);

			/** [프로그레스 값 증가 테스트 위해 progress_Value 증가 코드 삽입]*/
			progress_Value += 20;

			//==== [자신을 1초마다 호출(무한 루프로 호출)] ====
			ProgressHandler.sendEmptyMessageDelayed(0, 1000);
		}
	}
};



// ====== [프로그레스 로딩 종료 메소드] ======
public void getProgressStop(){
	try {
		//==== [핸들러 사용 해제] ====
		if(ProgressHandler != null){
			ProgressHandler.removeMessages(0);
			ProgressHandler.removeCallbacks(null);
		}
		//==== [다이얼로그 종료] ====
		if(progress_Dialog != null){
			progress_Dialog.dismiss();
		}
		//==== [프로그레스 값 초기화 실시] ====
		progress_Value = 0;
	}
	catch (Exception e){
		e.printStackTrace();
	}
}

/* =========================== */

[결과 출력]

/* =========================== */

/* =========================== */

[첨부 이미지 파일]

/* =========================== */

반응형
Comments