好久没写博客啦。。今天来个交叉动画的进度条。。看着挺玄的,现在大多数都是直接使用DialogFragment来实现,那咱们也就用DialogFragment来实现。使用DialogFragment实现对话框和进度条是现在比较流行和常用的方式
要有交叉的动画效果,我们首先需要一些列的图片来构成一个完整的动画,将这些图片按顺序放到一个xml中,随便找一个组件作为它的背景即可
先看xm文件
- <?xml version="1.0" encoding="UTF-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:background="@drawable/bg_cross_progress_back"
- android:gravity="center"
- android:orientation="vertical" >
- <TextView
- android:id="@+id/tv_cp_load"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:background="@drawable/bg_cross_progress"
- android:text="" />
- <TextView
- android:id="@+id/tv_cp_content"
- style="@style/text_22"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginTop="10dp"
- android:text="@string/app_name"
- android:textColor="@color/white" />
- </LinearLayout>
- <?xml version="1.0" encoding="utf-8"?>
- <animation-list xmlns:android="http://schemas.android.com/apk/res/android"
- android:oneshot="false" >
- <item
- android:drawable="@drawable/bg_cross_progress_1"
- android:duration="50"/>
- <item
- android:drawable="@drawable/bg_cross_progress_2"
- android:duration="50"/>
- <item
- android:drawable="@drawable/bg_cross_progress_3"
- android:duration="50"/>
- <item
- android:drawable="@drawable/bg_cross_progress_4"
- android:duration="50"/>
- <item
- android:drawable="@drawable/bg_cross_progress_5"
- android:duration="50"/>
- <item
- android:drawable="@drawable/bg_cross_progress_6"
- android:duration="50"/>
- <item
- android:drawable="@drawable/bg_cross_progress_7"
- android:duration="50"/>
- <item
- android:drawable="@drawable/bg_cross_progress_8"
- android:duration="50"/>
- <item
- android:drawable="@drawable/bg_cross_progress_9"
- android:duration="50"/>
- <item
- android:drawable="@drawable/bg_cross_progress_10"
- android:duration="50"/>
- <item
- android:drawable="@drawable/bg_cross_progress_11"
- android:duration="50"/>
- <item
- android:drawable="@drawable/bg_cross_progress_12"
- android:duration="50"/>
- <item
- android:drawable="@drawable/bg_cross_progress_13"
- android:duration="50"/>
- <item
- android:drawable="@drawable/bg_cross_progress_14"
- android:duration="50"/>
- <item
- android:drawable="@drawable/bg_cross_progress_15"
- android:duration="50"/>
- <item
- android:drawable="@drawable/bg_cross_progress_16"
- android:duration="50"/>
- <item
- android:drawable="@drawable/bg_cross_progress_17"
- android:duration="50"/>
- <item
- android:drawable="@drawable/bg_cross_progress_18"
- android:duration="50"/>
- <item
- android:drawable="@drawable/bg_cross_progress_19"
- android:duration="50"/>
- <item
- android:drawable="@drawable/bg_cross_progress_20"
- android:duration="50"/>
- </animation-list>
3:定义自己的交叉动画dialog【继承DialogFragment】
- public class CrossProgressDialog extends DialogFragment
- {
- /** 名称&TAG **/
- private static final String NAME = CrossProgressDialog.class.getSimpleName();
- /** 加载内容对应的bundle key **/
- private static final String CONTENT = "dialog_progress_content";
- /** 对话框实例 **/
- private static CrossProgressDialog mDialog;
- /** 取消事件 **/
- private DialogCancelListener mCancelListener;
- /**
- * 消失dialog
- */
- public static void dismissDialog()
- {
- if (mDialog != null)
- {
- try
- {
- mDialog.dismiss();
- mDialog = null;
- }
- catch (Exception e)
- {
- LogUtils.logException(e);
- }
- }
- }
- /**
- * {@link android.support.v4.app.DialogFragment#show(FragmentManager, String)}
- * 显示
- */
- public static CrossProgressDialog show(FragmentManager fragmentManager)
- {
- return show(fragmentManager, null, true);
- }
- /**
- * {@link android.support.v4.app.DialogFragment#show(FragmentManager, String)}
- * 显示
- */
- public static CrossProgressDialog show(FragmentManager fragmentManager, String content, boolean cancelable)
- {
- return show(fragmentManager, content, cancelable, null);
- }
- /**
- * {@link android.support.v4.app.DialogFragment#show(FragmentManager, String)}
- * 显示
- */
- public static CrossProgressDialog show(FragmentManager fragmentManager, String content,
- boolean cancelable, DialogCancelListener cancelListener)
- {
- //存在即移除
- removeIfExist(fragmentManager);
- //初始化对象
- mDialog = newInstance();
- //设置取消事件
- mDialog.setCancelable(cancelable);
- if (cancelable)
- {
- mDialog.mCancelListener = cancelListener;
- }
- //设置加载内容
- if(!TextUtils.isEmpty(content))
- {
- Bundle args = new Bundle();
- args.putString(CONTENT, content);
- mDialog.setArguments(args);
- }
- //显示
- mDialog.show(fragmentManager, NAME);
- return mDialog;
- }
- /**
- * 存在即移除.
- 初始化的时候若存在则直接强制从pop栈中移除
- */
- private static void removeIfExist(FragmentManager fragmentManager)
- {
- Fragment f = fragmentManager.findFragmentByTag(NAME);
- if (f != null)
- {
- fragmentManager.beginTransaction().remove(f).commit();
- }
- }
- /**
- * 初始化实例.
- * @Description: 初始化
- */
- private static CrossProgressDialog newInstance()
- {
- CrossProgressDialog dialog = new CrossProgressDialog();
- dialog.setStyle(STYLE_NO_FRAME, R.style.cross_dialog);
- return dialog;
- }
- @Override
- public void onCancel(DialogInterface dialog)
- {
- super.onCancel(dialog);
- if (mCancelListener != null)
- {
- mCancelListener.onCancelDialog();
- }
- }
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
- {
- View layout = inflater.inflate(R.layout.dialog_cross_progress, container, false);
- AnimationDrawable loadAnima = (AnimationDrawable) layout.findViewById(R.id.tv_cp_load).getBackground();
- loadAnima.start(); //启动背景动画
- TextView tv = (TextView) layout.findViewById(R.id.tv_cp_content);
- int visibility = View.GONE;
- //如果有内容,设置内容.
- if (getArguments() != null)
- {
- String content = getArguments().getString(CONTENT);
- if(!TextUtils.isEmpty(content))
- {
- visibility = View.VISIBLE;
- tv.setText(content);
- }
- }
- tv.setVisibility(visibility);
- return layout;
- }
- }
ok 了。。最后贴一下dialog的那个style
这个style就是保持屏幕背景不会变暗
- <style name="cross_dialog" parent="@style/dialog">
- <item name="android:backgroundDimEnabled">false</item>
- </style>