RotateAnimation:倾听每个角度变化

时间:2017-02-08 04:33:32

标签: android animation rotation android-animation

我有一个View我添加了RotateAnimation并且它运行正常。我唯一的问题是,是否有办法倾听每一个角度的变化。我知道我可以添加AnimationListener并使用以下监听器

rotateAnimation.setAnimationListener(new Animation.AnimationListener() {
        @Override
        public void onAnimationStart(Animation animation) {

        }

        @Override
        public void onAnimationEnd(Animation animation) {

        }

        @Override
        public void onAnimationRepeat(Animation animation) {

        }
    });

我还可以使用View.getRotation()来获取视图的角度。但是,应用程序的功能会根据用户选择的首选项更改w.r.t时间。

我正在寻找的是一个可以倾听每个角度变化的倾听者。 像onRotateAngleChange(int currentAngle)这样的东西。 关于任何此类方法的任何指示或我可以使用的任何解决方法都将是一个很大的帮助。

问候。

编辑:最终提示/代码有效。 感谢@yyobobom的指针。

rotateAnimation = new RotateAnimation(fromDegrees, toDegrees){
        @Override
        protected void applyTransformation(float interpolatedTime, Transformation t) {
            super.applyTransformation(interpolatedTime, t);
            float degrees = fromDegrees + ((toDegrees - fromDegrees) * interpolatedTime);
            //Do what you want to do with your angle here.
        }
    };

2 个答案:

答案 0 :(得分:1)

您需要做的只是实现applyTransformation,如下所示:

    RotateAnimation rotateAnim = new RotateAnimation (...) {
                 @Override
                 public void applyTransformation(float interpolatedTime, Transformation t)              
                 {
                      super.applyTransformation(interpolatedTime, t); 

                       <your code here>
                 }

答案 1 :(得分:0)

无法为RotationAnimation添加更新侦听器,但是使用ObjectAnimator

可以获得相同的结果
ObjectAnimator animator = ObjectAnimator.ofFloat(view, "rotation", initialValue, finalValue);
animator.setDuration(duration);
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
        @Override
        public void onAnimationUpdate(ValueAnimator valueAnimator) {
            currentRotation = valueAnimator.getAnimatedValue("rotation");
            //do something
        }
    });

或者,如果你的目标是API 19或更高版本,你可以使用Kitkat中添加的动画apis,使其更加简单,如下所示:

view.animate().rotationBy(finalValue - initalValue).setUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
        @Override
        public void onAnimationUpdate(ValueAnimator valueAnimator) {
            currentRotation = valueAnimator.getAnimatedValue("rotation");
            //do something
        }
    });