我有这个ImageButton。我想让它在某个时间开始制作动画。 我查看了android文档,找到了setStartTime(long startTimeMillis)。
这就是我提出的:
private ImageButton imgBtn;
// Other variables and stuff..
//And inside to onCreate void, I have set the button listener.
imgBtn.setOnClickListener(tappClickHandler);
Button.OnClickListener imgClickHandler = new Button.OnClickListener() {
@Override
public void onClick(View v) {
new AsyncTaskExample().execute("");
}
};
private class AsyncTaskExample extends AsyncTask<String, Integer, Integer> {
protected void onPreExecute(){
AlphaAnimation alDown = new AlphaAnimation(1.0f, 0.1f);
alDown.setDuration(200);
alDown.setFillAfter(true);
imgBtn.startAnimation(alDown);
}
@Override
protected Integer doInBackground(String... params) {
Date test = new Date();
return (test.getTime()/1000) + 5;
}
protected void onProgressUpdate(Integer... progress) {
}
protected void onPostExecute(Integer result) {
Date clientTime = new Date();
AlphaAnimation alUp = new AlphaAnimation(0.1f, 1.0f);
alUp.setDuration(200);
alUp.setStartTime(result);
imgBtn.setAnimation(alUp);
Log.d(LOG_TAG, "Time to start: " + imgBtn.getAnimation().getStartTime());
Log.d(LOG_TAG, "Current device time: " + clientTime.getTime()/1000);
}
}
日志打印:
02-13 20:40:42.634:D / tappWin(3504):开始时间:1329162048
02-13 20:40:42.634:D / tappWin(3504):当前设备时间:1329162042
imgBtn制作第一个动画,但不是第二个..
答案 0 :(得分:3)
绝对做太多工作来尝试跟踪动画时间。当前代码运行不正常的确切原因是因为setStartTime()
必须在AnimationUtils.currentAnimationTimeMillis()
返回的时间值的上下文中调用,而不是系统时间。
然而,更简单的方法是使用AnimationListener
对象在第一个动画完成时通知您以启动第二个动画。换句话说:
Animation fadeOut = new AlphaAnimation(1.0f, 0.1f);
fadeOut.setDuration(500);
fadeOut.setAnimationListener(new AnimationListener() {
@Override
public void onAnimationStart(Animation animation) { }
@Override
public void onAnimationRepeat(Animation animation) { }
@Override
public void onAnimationEnd(Animation animation) {
Animation fadeIn = new AlphaAnimation(0.1f, 1.0f);
fadeIn.setDuration(500);
imgBtn.startAnimation(fadeIn);
}
});
imgBtn.startAnimation(fadeOut);
HTH