加載動畫是每個做移動開發都會遇到的問題,我今天要說的不是動畫的實現效果,而是這個加載框的實現。
剛做開發時,我還是在每次請求的時候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 } } }