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
      }

   }
}

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