一个WP8样式的进度对话框。对应Android转圈圈的ProgressBar。使用方法和普通的dialog一样


publicclassWin8ProgressDialogextendsDialog{privateWPLoadingloading;publicWin8ProgressDialog(Contextcontext){super(context);}publicWin8ProgressDialog(Contextcontext,inttheme){super(context,theme);}publicvoidsetLoading(WPLoadingloading){this.loading=loading;}@Overridepublicvoidcancel(){loading.cancel();super.cancel();}publicWin8ProgressDialog(Contextcontext,booleancancelable,OnCancelListenercancelListener){super(context,cancelable,cancelListener);}publicstaticclassBuilder{privateContextmContext;privatebooleancanceledOnTouchOutside=true;privatebooleancancelable=true;publicBuilder(Contextcontext){mContext=context;}publicBuildersetCanceledOnTouchOutside(booleanflag){canceledOnTouchOutside=flag;returnthis;}publicBuildersetCancelable(booleanflag){cancelable=flag;returnthis;}publicWin8ProgressDialogcreate(){finalWin8ProgressDialogdialog=newWin8ProgressDialog(mContext,R.style.WPDialog);WPLoadingloading=newWPLoading(mContext);dialog.setLoading(loading);dialog.setCancelable(cancelable);dialog.setCanceledOnTouchOutside(canceledOnTouchOutside);dialog.setCanceledOnTouchOutside(false);dialog.addContentView(loading,newLayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT));loading.startAnimate();returndialog;}}}


WPLoading是Win8ProgressDialog显示的view,其实是一个包含了运动五个小蓝点的RelativeLayout,小蓝点的动画使用了一个先减速后加速的插值器DecelerateAccelerateStopInterpolator


publicclassWPLoadingextendsRelativeLayout{privateintsize=10;privateintdelay=300;privateintduration=3200;privateStringcolor="#0000ff";privateAnimatorSetanimatorSet=newAnimatorSet();publicWPLoading(Contextcontext){super(context);LayoutParamsparams0=newLayoutParams(DisplayUtil.getScreenWidth(context),size);Viewview=newView(context);view.setLayoutParams(params0);addView(view);}publicvoidstartAnimate(){LayoutParamsparams=newLayoutParams(size,size);animatorSet=newAnimatorSet();ArrayList<Animator>animators=newArrayList<Animator>();for(inti=0;i<5;i++){Viewview=newView(getContext());view.setBackgroundColor(Color.parseColor(color));addView(view);view.setLayoutParams(params);view.setX(-size);ObjectAnimatorheadAnimator=ObjectAnimator.ofFloat(view,"x",view.getX(),DisplayUtil.getScreenWidth(getContext()));headAnimator.setDuration(duration);headAnimator.setInterpolator(newDecelerateAccelerateStopInterpolator());headAnimator.setStartDelay(delay*i);headAnimator.setRepeatCount(-1);animators.add(headAnimator);}animatorSet.playTogether(animators);animatorSet.start();}publicWPLoading(Contextcontext,AttributeSetattrs){super(context,attrs);}publicWPLoading(Contextcontext,AttributeSetattrs,intdefStyle){super(context,attrs,defStyle);}publicvoidcancel(){animatorSet.end();}//先减速再加速的插值器,在加速完成后会再停止一会儿,循环地进行这个动画,就和WP8的Loading样式一样了classDecelerateAccelerateStopInterpolatorimplementsandroid.view.animation.Interpolator{privatefloatmFactor=1.0f;privatefloattailFactor=0.6f;publicDecelerateAccelerateStopInterpolator(){}publicDecelerateAccelerateStopInterpolator(floatfactor){mFactor=factor;}publicfloatgetInterpolation(floatx){floatresult;if(x>tailFactor){result=1;}elseif(x>tailFactor/2){result=(float)Math.pow((x-tailFactor/2)*2/tailFactor,2*mFactor)/2+0.5f;}else{result=(float)(1.0f-Math.pow((tailFactor-2*x)/tailFactor,2*mFactor))/2;}returnresult;}}}





更多相关文章

  1. Android(安卓)setTheme设置透明主题无效
  2. Android开发:Android设备传感器开发总结
  3. 【Android】字体
  4. MIUI 惊艳锁屏样式5款[Android] | 小众软件 > Android
  5. Android中SensorManager.getRotationMatrix函数原理解释
  6. android Button 样式
  7. Android记事本NotePad应用功能拓展(六)
  8. Android修改原生RatingBar颜色、大小,以及自定义的样式
  9. TextView设置跑马灯的样式

随机推荐

  1. Android自动化测试之MonkeyRunner录制和
  2. Android(安卓)studio开发找不到HttpClien
  3. android google map key申请
  4. Android视音频录制实现步骤(Android学习随
  5. [Android]Kernel的下载和编译
  6. AndroidMenifest.xml中android:sharedUse
  7. 与屏幕有关的设置:禁止横竖屏切换;横竖屏切
  8. android获取应用内自定义权限与权限使用
  9. 一个Demo让你掌握所有的android控件
  10. Android(安卓)单独抽取 WebRtc-NS/NSX(音