2012-01-15 17 views

回答

7

我在找同样的东西,找了个朋友帮我,这里是一个工作样本。希望对你有效。

-Raj

import android.app.Activity; 
import android.os.Bundle; 
import android.os.Handler; 
import android.os.Message; 
import android.widget.TextView; 

public class TimerUpdateAnimatorActivity extends Activity { 

    private static final int toValue = 20; 
    private static final int fromValue = 0; 
    private static final int FRAME_TIME_MS = 100; 
    private static final String KEY = "i"; 
    private TextView animatedText; 
    boolean isRunning = false; 

    // background updating 
    Handler handler = new Handler() { 
     public void handleMessage(Message msg) { 
      try { 
       int i= msg.getData().getInt(KEY); 
       animatedText.setText(""+i); 

      } catch (Exception err) { 
      } 
     } 

    }; 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     animatedText = (TextView) findViewById(R.id.animatedText); 
    } 

    public void onStart() { 
     super.onStart(); 
     Thread background = new Thread(new Runnable() { 
      public void run() { 
       try { 
        for (int i = fromValue; i <= toValue && isRunning; i++) { 
         Thread.sleep(FRAME_TIME_MS); 
         Bundle data= new Bundle(); 
         data.putInt(KEY, i); 
         Message message = handler.obtainMessage(); 
         message.setData(data); 
         handler.sendMessage(message); 
        } 
       } 
       catch (Throwable t) { 
       } 
      } 
     }); 
     isRunning = true; 
     background.start(); 
    } 

    public void onStop() { 
     super.onStop(); 
     isRunning = false; 
    } 

} 
0

我知道这是一个很老的答案,但这里有我的2美分。请注意,某些检查/代码应该到位,如果属性oldValue <值...

String values[] = new String[Math.abs(oldValue - value)]; 
int count = 0; 
for (int i = oldValue; i < value; i++) { 
    values[count++] = "" + i; 
} 

Animator animatorText = ObjectAnimator.ofObject(new AnimatedTextView(navigationBarBalanceAmountTextView), "Text", new TypeEvaluator<String>() { 
    @Override 
    public String evaluate(float fraction, String startValue, String endValue) { 
     return (fraction < 0.5) ? startValue : endValue; 
    } 
}, values);  
animatorText.start(); 
1

我创建了一个类使用你选择了Android Interpolator动画数值变化。这使您可以使用与Android中其他动画相同的算法来控制更改速率。例如,你可能更喜欢数值变化,而不是以恒定速率动画,数字变化很快开始,然后随着它接近其最终值而变慢。

你可以阅读关于实现这个here的完整文章。

该课程的完整源代码可以作为Gist here使用。

使用带您选择的插值器的ValueAnimator类来实现文本值的动画。下面是创建动画的主要代码,并添加了侦听器,以便在动画执行时更新视图上的文本。

public void execute(){ 
    mValueAnimator = ValueAnimator.ofFloat(mStartValue, mEndValue); 
    mValueAnimator.setDuration(mDuration); 
    mValueAnimator.setInterpolator(mInterpolator); 
    mValueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { 
    @Override 
     public void onAnimationUpdate(ValueAnimator valueAnimator) { 
      float current = Float.valueOf(valueAnimator.getAnimatedValue().toString()); 
      mView.setText(String.format("%." + mPrecision + "f", current)); 
     } 
    });  

    mValueAnimator.start(); 
}