2012-01-31 43 views
7

Tôi đã có một TextView mà tôi muốn đếm ngược (3 ... 2 ... 1 ... công cụ xảy ra).Android Simple TextView Animation

Để làm cho nó thú vị hơn một chút, tôi muốn mỗi chữ số bắt đầu ở mức độ mờ đục đầy đủ và mờ dần đến độ trong suốt.

Có cách nào đơn giản để thực hiện việc này không?

Trả lời

11

Hãy thử một cái gì đó như thế này:

private void countDown(final TextView tv, final count) { 
    if (count == 0) { 
    tv.setText(""); //Note: the TextView will be visible again here. 
    return; 
    } 
    tv.setText(count); 
    AlphaAnimation animation = new AlphaAnimation(1.0f, 0.0f); 
    animation.setDuration(1000); 
    animation.setAnimationListener(new AnimationListener() { 
    public void onAnimationEnd(Animation anim) { 
     countDown(tv, count - 1); 
    } 
    ... //implement the other two methods 
    }); 
    tv.startAnimation(animation); 
} 

tôi chỉ cần gõ nó ra, vì vậy nó có thể không biên dịch như vậy.

+1

thay thế 'tv.setText (count); 'bằng' tv.setText (String.valueOf (count)); 'và mã hoạt động tốt –

2

Hãy xem CountDownAnimation.

Lần đầu tiên tôi thử giải pháp @dmon, nhưng vì mọi hoạt ảnh bắt đầu ở cuối của phiên bản trước, bạn sẽ bị trễ sau một vài cuộc gọi.

Vì vậy, tôi đã triển khai CountDownAnimation lớp sử dụng một hàm Handler và hàm postDelayed. Theo mặc định, nó sử dụng hoạt ảnh alpha nhưng bạn có thể đặt bất kỳ hoạt ảnh nào. Bạn có thể tải xuống dự án here.

4

Tôi đã sử dụng một hình ảnh động Android theo phong cách truyền thống hơn cho việc này:

 ValueAnimator animator = new ValueAnimator(); 
     animator.setObjectValues(0, count); 
     animator.addUpdateListener(new AnimatorUpdateListener() { 
      public void onAnimationUpdate(ValueAnimator animation) { 
       view.setText(String.valueOf(animation.getAnimatedValue())); 
      } 
     }); 
     animator.setEvaluator(new TypeEvaluator<Integer>() { 
      public Integer evaluate(float fraction, Integer startValue, Integer endValue) { 
       return Math.round((endValue - startValue) * fraction); 
      } 
     }); 
     animator.setDuration(1000); 
     animator.start(); 

Bạn có thể chơi với các giá trị 0count để làm cho bộ đếm đi từ bất kỳ số lượng với bất kỳ số lượng, và chơi với các 1000 để đặt thời lượng của toàn bộ hoạt ảnh.

Lưu ý rằng điều này hỗ trợ API Android 11 trở lên, nhưng bạn có thể sử dụng dự án nineoldandroids tuyệt vời để dễ dàng tương thích ngược.