android開發中的加載框

加載動畫是每個做移動開發都會遇到的問題,我今天要說的不是動畫的實現效果,而是這個加載框的實現。

剛做開發時,我還是在每次請求的時候new出來一個dialog,顯示。後來覺得麻煩,也僅僅只是把這個dialog拿出去寫了一個靜態方法,返回dialog,每次就拿着這個show和dismiss。第二次的做法相對於第一次的做法簡單再了不用每次去寫這個dialog了,但是並沒有從根本上解決問題,每次出來的dialog還是一個新的,完全沒有做到複用。dismiss的時候還需要判斷這個dialog是否爲空等等讓你抓狂的問題。

今天我要記錄的就是一個dialog類,這個類提供兩個方法,一個show,一個dismiss。加載動畫隨意定製,使用的時候只用拿着這個類就行,並切在整個應用中只會有一個,不會出現第二個。有沒有很開心,貼上代碼就會更開心了。得意

public class LoadingDailog {

   private static Dialog pd;

   public static void show(Context context) {
      show(context, true);
   }

   public static void show(Context context, boolean cancelable) {
      try {
         dismiss();
         //拿到dialog
         pd = getLoadingDialog(context);
         //設置點擊外圍是否消失
         pd.setCancelable(cancelable);
         pd.show();
      } catch (Exception e) {


      }

   }
 //這裏的加載效果自己隨意定義
 public static Dialog getLoadingDialog(Context context) {
      Dialog loading_dialog = new Dialog(context, R.style.dialog_loading);
      View view  = LayoutInflater.from(context).inflate(R.layout.layout_loading,null);
      loading_dialog.setContentView(view);
      GifView loadingView = (GifView) view.findViewById(R.id.loadingView);
      // 設置背景gif圖片資源
      loadingView.setMovieResource(R.raw.loading);
      loadingView.setMinimumWidth(AppUtils.getScreenDispaly(context)[0]/4);
      loadingView.setMinimumHeight(AppUtils.getScreenDispaly(context)[0]/4);
      loading_dialog.getWindow().setBackgroundDrawableResource(R.color.transparent);
      loading_dialog.setCancelable(false);
      return loading_dialog;
   }


   //在這裏直接做了判斷,大膽的放心的使用,保證不會出現空指針
   public static void dismiss() {
      try {
         if (pd != null && pd.isShowing()) {
            pd.dismiss();
         }
         pd = null;
      } catch (Exception e) {
         // TODO: handle exception
      } finally {
         pd = null;
      }
   }


   public static boolean isShowing() {
      try {
         if (pd != null) {
            return pd.isShowing();
         }
      } catch (Exception e) {
         // TODO: handle exception
      }
      return false;
   }

   /**
    * 設置dialog點擊外部是否可以消失
    */
   public static void setCanceledOnTouchOutside(boolean b) {
      try {
         if (pd != null && pd.isShowing()) {
            pd.setCanceledOnTouchOutside(b);
         }
      } catch (Exception e) {
         // TODO: handle exception
      }

   }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章