如何在特定时间启动Android AlphaAnimation?

时间:2012-02-13 19:44:14

标签: android animation android-animation

我有这个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制作第一个动画,但不是第二个..

1 个答案:

答案 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