본문 바로가기
안드로이드 자바

[JAVA][Android] Loding 프로그레스바 만들기

by teamnova 2021. 10. 14.

안녕하세요

 

오늘은 원형 프로그레스바, 막대형 프로그레스바 화면을 만들어 보겠습니다.

 

버튼에 따라 로딩이 진행되는 화면이 나타납니다.

 

*결과

 

먼저 아래 스틱코드 링크에서 즐겨찾기 추가를 해주세요

 

https://stickode.com/detail.html?no=2522 

 

스틱코드

 

stickode.com

 

 

1. MainActivity.java

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.Button;


public class MainActivity extends AppCompatActivity {

    private ProgressDialog pBar;
    private Button wheel,bar;
    private ThreadEx threadEx;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        wheel = (Button)findViewById(R.id.wheel);
        bar = (Button)findViewById(R.id.bar);

        wheel.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                //프로그래스바는 기본적으로 원형을 제공한다.
                pBar = ProgressDialog.show(MainActivity.this//Context
                        ,"title"//타이틀
                        ,"Loading..."//메세지
                );

                //도중 취소 여부
                pBar.setCancelable(false);


                threadEx = new ThreadEx(handler);
                threadEx.start();//Thread 실행
            }
        });

        bar.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                pBar = new ProgressDialog(MainActivity.this);

                //수평 프로그레스바로 설정
                pBar.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);

                //메세지 설정
                pBar.setMessage("Loading...");

                //중도 취소 여부
                pBar.setCancelable(true);

                pBar.show();

                threadEx = new ThreadEx(handler);
                threadEx.start();//Thread 실행
            }
        });
    }

    Handler handler = new Handler(){

        @Override
        public void handleMessage(@NonNull Message msg) {
         

            int value = msg.getData().getInt("value");
       
            pBar.setProgress(value);

            super.handleMessage(msg);

            pBar.setMessage("Loding..." + value + "%");

            if(value >= 100){
                pBar.dismiss();
                threadEx.setCheck(false);
            }
        }
    };
}

 

2. ThreadEX.java

 

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;

public class ThreadEx extends Thread{

    private Handler handler; //쓰레드의 값등을 제어하는 클래스...

    private boolean check = true;

    //생성자
    public ThreadEx(Handler handler){
        this.handler = handler;
    }


    public void setCheck(boolean check){
        this.check = check;
        
    }

    //스레드가 해야할일들을 정의한 메소드..
    @Override
    public void run() {
        int value = 0;

        while(check){
            try{
                Thread.sleep(100); // 내가 지정한 시간 만큼 멈추어 주는 메소드...
            }catch (InterruptedException e){
                e.printStackTrace();
            }


            Message msg = handler.obtainMessage();
           

            Bundle bundle = new Bundle();

            bundle.putInt("value",value);

            msg.setData(bundle);

        
            //핸들러 호출
            handler.sendMessage(msg);
            value++;
        }
        super.run();
    }
}

 

3. activity_main.xml