안드로이드에서 로딩바 만드는법

조회수 4485회

앱을 만들고있는데 이미지를 불러오는동안 화면이 가만히 있으면 멈춘것같아보일거같아서 이미지가 로딩되고있다는 표시를 띄우고싶은데요 어떻게 하면 좋을까요?

1 답변

  • 좋아요

    0

    싫어요
    채택 취소하기

    안드로이드에서는 로딩바를 프로그레스바라고 부르는데요. 커스텀 프로그레스바를 위해 스타일을 정의해줍니다.

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
    <style name="custom_loading">
        <item name="android:windowFrame">@null</item>
        <item name="android:windowIsFloating">true</item>
        <item name="android:windowContentOverlay">@null</item>
        <item name="android:windowTitleStyle">@null</item>
        <item name="android:windowAnimationStyle">@+android:style/Animation.Dialog</item>
        <item name="android:windowBackground">@+android:color/transparent</item>
        <item name="android:windowNoTitle">true</item>
    </style>
    </resources>
    

    로딩바를 만들기 위해 클래스를 정의해줍니다.

    import android.app.Dialog;
    import android.content.Context;
    import android.view.ViewGroup.LayoutParams;
    import android.widget.ProgressBar;
    
    /**
     * 커스텀로딩 클래스
     * @author YT
     */
    public class CLoading{
        private static Dialog m_loadingDialog = null;
    
        public static void showLoading(Context context) {
    
            if (m_loadingDialog == null) {    
                //다이얼로그가 없으면 만들고 보이게 하라
                m_loadingDialog = new Dialog(context, R.style.custom_loading);
                //프로그레스를 생성하자
                ProgressBar pb = new ProgressBar(context);
                LayoutParams params = new LayoutParams(
                LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
                //프로그래스를 다이얼로그에 포함하자
                m_loadingDialog.setContentView(pb, params);
                m_loadingDialog.setCancelable(false);
                m_loadingDialog.show();    
            } else if(!m_loadingDialog.isShowing()){    
                //다이얼로그가 있는데 HIDE 상태면 보이게 하라            
                m_loadingDialog = null;
                m_loadingDialog = new Dialog(context, R.style.custom_loading);
                ProgressBar pb = new ProgressBar(context);
                LayoutParams params = new LayoutParams(
                LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
                m_loadingDialog.setContentView(pb, params);
                m_loadingDialog.setCancelable(false);
                m_loadingDialog.show();
            }
    
        }
        public static void hideLoading() {
            if (m_loadingDialog != null) {
                if(m_loadingDialog.isShowing()){
                    //다이얼로그가 있고 보이는 상태면 안보이게 하라    
                    m_loadingDialog.dismiss();
                    m_loadingDialog = null;
                }    
            }
        }
    }
    

    프로그레스바를 띄울 액티비티에가서

    Context context;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        context = this;
    
        CLoading.showLoading(context);    //show
        //CLoading.hideLoading();        //hide
    
    }
    

    이런식으로 CLoading의 showLoading메소드를 호출해줍니다.

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)