有没有办法动画setRotation或应该用RotateAnimation替换?

时间:2015-11-02 02:25:42

标签: android android-animation android-orientation android-imagebutton rotateanimation

我使用setRotation()使一些按钮相应地旋转到设备方向。但是,我注意到这些变化并不顺利发生,我想知道是否有一种简单的方法可以用RotateAnimation替换这个方法。主要问题是这些方向变化不会从相同的角度发生,例如。动画必须处理0-90和270-90的旋转。我正在使用OrientationEventListener来检测角度方向。有什么想法吗?

更新:

   OrientationEventListener orientationEventListener = new OrientationEventListener(this, SensorManager.SENSOR_DELAY_UI) {

    @Override 
    public void onOrientationChanged(int angle) {
        float currentAngle = downloadStatus.getRotation();
        if(angle > 260 && angle < 280) {
            downloadStatus.animate().rotationBy(90 - currentAngle).setDuration(100).start();
        } else if(angle > 80 && angle < 100) {
            downloadStatus.animate().rotationBy(-90 - currentAngle).setDuration(100).start();
        } else if(angle > 350 || angle < 10){
            downloadStatus.animate().rotationBy(-currentAngle).setDuration(100).start();
        } else if(angle > 170 && angle < 190){
            downloadStatus.animate().rotationBy(180 - currentAngle).setDuration(100).start();
        } 
    } 
}; 
orientationEventListener.enable();

我接下来尝试的是用以下两个替换反向纵向角度:

while (MyButtonCurrentAngle==90) { 
    if (ButtonsAngle > 170 && ButtonsAngle < 190) {
        MyButton.animate().rotationBy(90 - MyButtonCurrentAngle).setDuration(100).start();
    }
}
while (MyButtonCurrentAngle==270) { 
    if (ButtonsAngle > 170 && ButtonsAngle < 190) {
        MyButton.animate().rotationBy(-90 - MyButtonCurrentAngle).setDuration(100).start();
    }
}

1 个答案:

答案 0 :(得分:3)

尝试将我以前的代码更新为:

    OrientationEventListener orientationEventListener = new OrientationEventListener(this, SensorManager.SENSOR_DELAY_UI) {

        @Override
        public void onOrientationChanged(int angle) {
            float currentAngle = downloadStatus.getRotation();
            if(angle > 260 && angle < 280) {
                downloadStatus.animate().rotationBy(90 - currentAngle).setDuration(100).start();
            } else if(angle > 80 && angle < 100) {
                downloadStatus.animate().rotationBy(-90 - currentAngle).setDuration(100).start();
            } else if(angle > 350 || angle < 10){
                downloadStatus.animate().rotationBy(-currentAngle).setDuration(100).start();
            }
        }
    };
    orientationEventListener.enable();