使用Animation类的自定义倒计时视图

时间:2017-02-28 19:41:38

标签: android android-layout

我需要创建如下图所示的内容:

我需要能够设置最大值,让它每秒倒计时直到达到0,显示该值,并且进度条也会每秒移动一次。

我尝试了一些使用这个库的不同方法:CircleProgressView,但我最终不得不使用Handler和单独的线程,并且使用Android生命周期来控制线程只是一个完全的噩梦。 / p>

可以使用形状和动画完成吗?我知道动画进度圈相当简单,但在中间显示这个数字我还没有做到。

修改

所以我发现这个库有一个setValueAnimated方法(RTFM)..看起来它可以解决我的问题。不过,我仍然有点担心图书馆可能比我需要的还多。

1 个答案:

答案 0 :(得分:2)

要为文字制作动画,您可以执行以下操作:

#tf{
 color : #aaaaaa;
}

和你的进步一样:

public static void animateValue(Context context, final TextView textView, int duration,final double start, final double goal) {
        if (start != goal) {
            ValueAnimator animator = ValueAnimator.ofFloat((float) start, (float) goal);
            animator.setInterpolator(new AccelerateDecelerateInterpolator());
            animator.setDuration(duration));
            animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
                @Override
                public void onAnimationUpdate(ValueAnimator animation) {
                    textView.setText(formatPercentage((float)animation.getAnimatedValue()));
                }
            });
            animator.start();
        } else {
            textView.setText(formatPercentage(goal));
        }
    }

    public static String formatPercentage(final Float value) {
        //TODO do your desiredFormat
    }

为了你的进步颜色你可以做这样的事情:

  public static void animateProgress(final Context context, final ProgressBar progressBar, int duration, final int start, final int end) {        
        if (shouldAnimate(context) && start != end) {
            ObjectAnimator animation = ObjectAnimator.ofInt(progressBar, "progress", start, end);
            animation.setDuration(scaleDuration(context, duration));
            animation.setInterpolator(new AccelerateDecelerateInterpolator());            
            animation.start();
        } else {
            progressBar.setProgress(end);
        }
    }