使用valueAnimator在重复动画之前添加延迟

时间:2014-09-17 01:41:30

标签: android

我尝试了一个简单的示例,例如拥有TextView并将其从屏幕宽度的0%转换为100%

代码是:

    anim0  = ObjectAnimator.ofFloat(textViewId00, "translationX", -120f, 480f);

其中480f是我的屏幕宽度。

我想要的是接下来N次(在我的例子中n = 5)在开始之前添加延迟。

我尝试在setStartDelay()上使用onAnimationRepeat方法添加延迟,但没有效果。

我的代码是:

        textViewId00 = (TextView) findViewById(R.id.textViewId00);


    anim0  = ObjectAnimator.ofFloat(textViewId00, "translationX", -120f, 480f);
    anim0.setDuration(2000);
    anim0.setRepeatCount(5);
    anim0.addListener(new Animator.AnimatorListener() {
        @Override
        public void onAnimationStart(Animator animation) {
            Log.i(TAG, "anim0 onAnimationStart ");
            textViewId00.setVisibility(View.VISIBLE);
        }

        @Override
        public void onAnimationEnd(Animator animation) {
            Log.i(TAG, "anim0 onAnimationEND " );
        }

        @Override
        public void onAnimationCancel(Animator animation) {

        }

        @Override
        public void onAnimationRepeat(Animator animation) {
            Log.i(TAG, "anim0 onAnimation REPEAT " );
            anim0.setStartDelay(14000);
        }
    });
    anim0.start();

textView出现在屏幕上,移动直到它消失,然后从开始再次没有任何延迟。

1 个答案:

答案 0 :(得分:4)

我刚刚尝试使用此代码,看起来它正在按照您的意愿执行:

public void animateView() {
    Display display = getWindowManager().getDefaultDisplay();
    Point size = new Point();
    display.getSize(size);

    final int screenWidth = size.x;

    final ObjectAnimator anim0  = ObjectAnimator.ofFloat(textviewId00, "translationX", -120f, screenWidth);
    anim0.setDuration(2000);
    anim0.addListener(new Animator.AnimatorListener() {

        int count;

        @Override
        public void onAnimationStart(Animator animation) {
            textViewId00.setVisibility(View.VISIBLE);
        }

        @Override
        public void onAnimationEnd(Animator animation) {
            if (++count < 5) {
                anim0.setStartDelay(14000);
                anim0.start();
            }
        }

        @Override
        public void onAnimationCancel(Animator animation) {}

        @Override
        public void onAnimationRepeat(Animator animation) {}
    });
    anim0.start();
}