加载动画是每个做移动开发都会遇到的问题,我今天要说的不是动画的实现效果,而是这个加载框的实现。
刚做开发时,我还是在每次请求的时候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 } } }