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


public class Win8ProgressDialog extends Dialog {    private WPLoading loading;    public Win8ProgressDialog(Context context) {        super(context);    }    public Win8ProgressDialog(Context context, int theme) {        super(context, theme);    }    public void setLoading(WPLoading loading) {        this.loading = loading;    }    @Override    public void cancel() {        loading.cancel();        super.cancel();    }    public Win8ProgressDialog(Context context, boolean cancelable,            OnCancelListener cancelListener) {        super(context, cancelable, cancelListener);    }    public static class Builder {        private Context mContext;        private boolean canceledOnTouchOutside = true;        private boolean cancelable = true;        public Builder(Context context) {            mContext = context;        }        public Builder setCanceledOnTouchOutside(boolean flag) {            canceledOnTouchOutside = flag;            return this;        }        public Builder setCancelable(boolean flag) {            cancelable = flag;            return this;        }        public Win8ProgressDialog create() {            final Win8ProgressDialog dialog = new Win8ProgressDialog(mContext,                    R.style.WPDialog);            WPLoading loading = new WPLoading(mContext);            dialog.setLoading(loading);            dialog.setCancelable(cancelable);            dialog.setCanceledOnTouchOutside(canceledOnTouchOutside);            dialog.setCanceledOnTouchOutside(false);            dialog.addContentView(loading, new LayoutParams(                    LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));            loading.startAnimate();            return dialog;        }    }}


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


public class WPLoading extends RelativeLayout {private int size = 10;private int delay = 300;private int duration = 3200;private String color = "#0000ff";private AnimatorSet animatorSet = new AnimatorSet();public WPLoading(Context context) {super(context);LayoutParams params0 = new LayoutParams(DisplayUtil.getScreenWidth(context), size);View view = new View(context);view.setLayoutParams(params0);addView(view);}public void startAnimate() {LayoutParams params = new LayoutParams(size, size);animatorSet = new AnimatorSet();ArrayList animators = new ArrayList();for (int i = 0; i < 5; i++) {View view = new View(getContext());view.setBackgroundColor(Color.parseColor(color));addView(view);view.setLayoutParams(params);view.setX(-size);ObjectAnimator headAnimator = ObjectAnimator.ofFloat(view, "x",view.getX(), DisplayUtil.getScreenWidth(getContext()));headAnimator.setDuration(duration);headAnimator.setInterpolator(new DecelerateAccelerateStopInterpolator());headAnimator.setStartDelay(delay * i);headAnimator.setRepeatCount(-1);animators.add(headAnimator);}animatorSet.playTogether(animators);animatorSet.start();}public WPLoading(Context context, AttributeSet attrs) {super(context, attrs);}public WPLoading(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);}public void cancel() {animatorSet.end();}// 先减速再加速的插值器,在加速完成后会再停止一会儿,循环地进行这个动画,就和WP8的Loading样式一样了class DecelerateAccelerateStopInterpolator implementsandroid.view.animation.Interpolator {private float mFactor = 1.0f;private float tailFactor = 0.6f;public DecelerateAccelerateStopInterpolator() {}public DecelerateAccelerateStopInterpolator(float factor) {mFactor = factor;}public float getInterpolation(float x) {float result;if (x > tailFactor) {result = 1;} else if (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;}return result;}}}





更多相关文章

  1. Android预定义样式
  2. Android感应检测Sensor(简单介绍)
  3. Android(安卓)利用Sharp样式设置文本框EditText圆角形状
  4. RadioButton和CheckBox自定义按钮图片的样式
  5. Android(安卓)插值器 Interpolator 介绍
  6. Android(安卓)之 下拉框(Spinner)的简单使用
  7. Android:interpolator用法
  8. android感应器Senor
  9. Android(安卓)之 下拉框(Spinner)的简单使用

随机推荐

  1. Android(安卓)context 文件模式
  2. Android的性能优化方法
  3. Android(安卓)进程保活,Service进程常驻
  4. Android数据库操作--greenDAO的入门使用
  5. Android(安卓)如何在关于手机界面添加个
  6. 不需要任何权限获得Android设备的唯一ID
  7. Android教学大纲(知识体系结构)
  8. Android四大组件之Service调优及进程保活
  9. Android开发者应该深入学习的10个开源应
  10. Android开发之接收系统广播消息