交叉动画进度条

来源:互联网 发布:聚合数据平台 编辑:程序博客网 时间:2024/06/02 09:22

   好久没写博客啦。。今天来个交叉动画的进度条。。看着挺玄的,现在大多数都是直接使用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>
  接下来就是我们的bg_cross_progres背景即一个包含一些列图片的drawable

<?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>
   需要注意的是这个xml文件的根目录是  animation-list,将这个xml文件放到你定义的drawable文件夹中

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>





0 0
原创粉丝点击