交叉动画进度条

 好久没写博客啦。。今天来个交叉动画的进度条。。看着挺玄的,现在大多数都是直接使用DialogFragment来实现,那咱们也就用DialogFragment来实现。使用DialogFragment实现对话框和进度条是现在比较流行和常用的方式

  要有交叉的动画效果,我们首先需要一些列的图片来构成一个完整的动画,将这些图片按顺序放到一个xml中,随便找一个组件作为它的背景即可

  先看xm文件

     

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:layout_width="match_parent"  
  4.     android:layout_height="wrap_content"  
  5.     android:background="@drawable/bg_cross_progress_back"  
  6.     android:gravity="center"  
  7.     android:orientation="vertical" >  
  8.   
  9.     <TextView  
  10.         android:id="@+id/tv_cp_load"  
  11.         android:layout_width="wrap_content"  
  12.         android:layout_height="wrap_content"  
  13.         android:background="@drawable/bg_cross_progress"  
  14.         android:text="" />  
  15.   
  16.     <TextView  
  17.         android:id="@+id/tv_cp_content"  
  18.         style="@style/text_22"  
  19.         android:layout_width="wrap_content"  
  20.         android:layout_height="wrap_content"  
  21.         android:layout_marginTop="10dp"  
  22.         android:text="@string/app_name"  
  23.         android:textColor="@color/white" />  
  24.   
  25. </LinearLayout>  
  接下来就是我们的bg_cross_progres背景即一个包含一些列图片的drawable

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <animation-list xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:oneshot="false" >  
  4.   
  5.     <item  
  6.         android:drawable="@drawable/bg_cross_progress_1"  
  7.         android:duration="50"/>  
  8.     <item  
  9.         android:drawable="@drawable/bg_cross_progress_2"  
  10.         android:duration="50"/>  
  11.     <item  
  12.         android:drawable="@drawable/bg_cross_progress_3"  
  13.         android:duration="50"/>  
  14.     <item  
  15.         android:drawable="@drawable/bg_cross_progress_4"  
  16.         android:duration="50"/>  
  17.     <item  
  18.         android:drawable="@drawable/bg_cross_progress_5"  
  19.         android:duration="50"/>  
  20.     <item  
  21.         android:drawable="@drawable/bg_cross_progress_6"  
  22.         android:duration="50"/>  
  23.     <item  
  24.         android:drawable="@drawable/bg_cross_progress_7"  
  25.         android:duration="50"/>  
  26.     <item  
  27.         android:drawable="@drawable/bg_cross_progress_8"  
  28.         android:duration="50"/>  
  29.     <item  
  30.         android:drawable="@drawable/bg_cross_progress_9"  
  31.         android:duration="50"/>  
  32.     <item  
  33.         android:drawable="@drawable/bg_cross_progress_10"  
  34.         android:duration="50"/>  
  35.     <item  
  36.         android:drawable="@drawable/bg_cross_progress_11"  
  37.         android:duration="50"/>  
  38.     <item  
  39.         android:drawable="@drawable/bg_cross_progress_12"  
  40.         android:duration="50"/>  
  41.     <item  
  42.         android:drawable="@drawable/bg_cross_progress_13"  
  43.         android:duration="50"/>  
  44.     <item  
  45.         android:drawable="@drawable/bg_cross_progress_14"  
  46.         android:duration="50"/>  
  47.     <item  
  48.         android:drawable="@drawable/bg_cross_progress_15"  
  49.         android:duration="50"/>  
  50.     <item  
  51.         android:drawable="@drawable/bg_cross_progress_16"  
  52.         android:duration="50"/>  
  53.     <item  
  54.         android:drawable="@drawable/bg_cross_progress_17"  
  55.         android:duration="50"/>  
  56.     <item  
  57.         android:drawable="@drawable/bg_cross_progress_18"  
  58.         android:duration="50"/>  
  59.     <item  
  60.         android:drawable="@drawable/bg_cross_progress_19"  
  61.         android:duration="50"/>  
  62.     <item  
  63.         android:drawable="@drawable/bg_cross_progress_20"  
  64.         android:duration="50"/>  
  65.   
  66. </animation-list>  
   需要注意的是这个xml文件的根目录是   animation-list,将这个xml文件放到你定义的drawable文件夹中

3:定义自己的交叉动画dialog【继承DialogFragment】

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. public class CrossProgressDialog extends DialogFragment  
  2. {  
  3.     /** 名称&TAG **/  
  4.     private static final String NAME = CrossProgressDialog.class.getSimpleName();  
  5.     /** 加载内容对应的bundle key **/  
  6.     private static final String CONTENT = "dialog_progress_content";  
  7.       
  8.     /** 对话框实例 **/  
  9.     private static CrossProgressDialog mDialog;  
  10.     /** 取消事件 **/  
  11.     private DialogCancelListener mCancelListener;  
  12.   
  13.     /** 
  14.      *   消失dialog 
  15.      */  
  16.     public static void dismissDialog()  
  17.     {  
  18.         if (mDialog != null)  
  19.         {  
  20.             try  
  21.             {  
  22.                 mDialog.dismiss();  
  23.                 mDialog = null;  
  24.             }  
  25.             catch (Exception e)  
  26.             {  
  27.                 LogUtils.logException(e);  
  28.             }  
  29.         }  
  30.     }  
  31.   
  32.     /** 
  33.      * {@link android.support.v4.app.DialogFragment#show(FragmentManager, String)} 
  34.      *   显示 
  35.      */  
  36.     public static CrossProgressDialog show(FragmentManager fragmentManager)  
  37.     {  
  38.         return show(fragmentManager, nulltrue);  
  39.     }  
  40.   
  41.     /** 
  42.      * {@link android.support.v4.app.DialogFragment#show(FragmentManager, String)} 
  43.      *  显示 
  44.      */  
  45.     public static CrossProgressDialog show(FragmentManager fragmentManager, String content, boolean cancelable)  
  46.     {  
  47.         return show(fragmentManager, content, cancelable, null);  
  48.     }  
  49.   
  50.   
  51.     /** 
  52.      * {@link android.support.v4.app.DialogFragment#show(FragmentManager, String)} 
  53.      *  显示 
  54.      */  
  55.     public static CrossProgressDialog show(FragmentManager fragmentManager, String content,   
  56.             boolean cancelable, DialogCancelListener cancelListener)  
  57.     {  
  58.         //存在即移除  
  59.         removeIfExist(fragmentManager);  
  60.         //初始化对象  
  61.         mDialog = newInstance();  
  62.         //设置取消事件  
  63.         mDialog.setCancelable(cancelable);  
  64.         if (cancelable)  
  65.         {  
  66.             mDialog.mCancelListener = cancelListener;  
  67.         }  
  68.         //设置加载内容  
  69.         if(!TextUtils.isEmpty(content))  
  70.         {  
  71.             Bundle args = new Bundle();  
  72.             args.putString(CONTENT, content);  
  73.             mDialog.setArguments(args);  
  74.         }  
  75.         //显示  
  76.         mDialog.show(fragmentManager, NAME);  
  77.           
  78.         return mDialog;  
  79.     }  
  80.   
  81.     /**  
  82.      * 存在即移除.  
[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1.        初始化的时候若存在则直接强制从pop栈中移除  
  2.      */  
  3.     private static void removeIfExist(FragmentManager fragmentManager)  
  4.     {  
  5.         Fragment f = fragmentManager.findFragmentByTag(NAME);  
  6.         if (f != null)  
  7.         {  
  8.             fragmentManager.beginTransaction().remove(f).commit();  
  9.         }  
  10.     }  
  11.   
  12.     /** 
  13.      * 初始化实例. 
  14.      * @Description: 初始化 
  15.      */  
  16.     private static CrossProgressDialog newInstance()  
  17.     {  
  18.         CrossProgressDialog dialog = new CrossProgressDialog();  
  19.         dialog.setStyle(STYLE_NO_FRAME, R.style.cross_dialog);  
  20.         return dialog;  
  21.     }  
  22.   
  23.     @Override  
  24.     public void onCancel(DialogInterface dialog)  
  25.     {  
  26.         super.onCancel(dialog);  
  27.         if (mCancelListener != null)  
  28.         {  
  29.             mCancelListener.onCancelDialog();  
  30.         }  
  31.     }  
  32.   
  33.     @Override  
  34.     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)  
  35.     {  
  36.         View layout = inflater.inflate(R.layout.dialog_cross_progress, container, false);  
  37.           
  38.         AnimationDrawable loadAnima = (AnimationDrawable) layout.findViewById(R.id.tv_cp_load).getBackground();  
  39.         loadAnima.start(); //启动背景动画  
  40.           
  41.         TextView tv = (TextView) layout.findViewById(R.id.tv_cp_content);  
  42.           
  43.         int visibility = View.GONE;  
  44.         //如果有内容,设置内容.  
  45.         if (getArguments() != null)  
  46.         {  
  47.             String content = getArguments().getString(CONTENT);  
  48.             if(!TextUtils.isEmpty(content))  
  49.             {  
  50.                 visibility = View.VISIBLE;  
  51.                 tv.setText(content);  
  52.             }  
  53.         }  
  54.         tv.setVisibility(visibility);  
  55.           
  56.         return layout;  
  57.     }  
  58. }  

ok 了。。最后贴一下dialog的那个style

            这个style就是保持屏幕背景不会变暗

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. <style name="cross_dialog" parent="@style/dialog">  
  2.     <item name="android:backgroundDimEnabled">false</item>  
  3. </style>  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序邦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值