我有一个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.
}
};
答案 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
}
});