Java 旋转时的Android动画

Java 旋转时的Android动画,java,android,animation,rotation,android-animation,Java,Android,Animation,Rotation,Android Animation,我有一个图像按钮,当手机旋转时会旋转。它按照设备方向旋转。比如: int rotation = this.getWindowManager().getDefaultDisplay().getRotation(); int degrees = 0; switch (rotation) { case Surface.ROTATION_0: degrees = 0; break; case Surface.ROTATION

我有一个图像按钮,当手机旋转时会旋转。它按照设备方向旋转。比如:

int rotation = this.getWindowManager().getDefaultDisplay().getRotation();
        int degrees = 0;
        switch (rotation) {
            case Surface.ROTATION_0: degrees = 0; break;
            case Surface.ROTATION_90: degrees = 90; break;
            case Surface.ROTATION_180: degrees = 180; break;
            case Surface.ROTATION_270: degrees = 270; break;
        }
        int relative_orientation = (current_orientation + degrees) % 360;
        int ui_rotation = (360 - relative_orientation) % 360;
        preview.setUIRotation(ui_rotation); 
然后在ImageButton中,我正在执行以下操作:

view = findViewById(R.id.button1);
            layoutParams = (RelativeLayout.LayoutParams)view.getLayoutParams();
            view.setLayoutParams(layoutParams);
            view.setRotation(ui_rotation);
它可以工作,但没有动画。。因此,旋转非常剧烈且不平稳。。有没有办法放动画

编辑:我添加了setUIRotation方法

void setUIRotation(int ui_rotation) {
        if( MyDebug.LOG )
            Log.d(TAG, "setUIRotation");
        this.ui_rotation = ui_rotation;
    }

您可以使用类似于以下内容而不是view.setRotation:

对于边缘情况,例如当触发另一个旋转时动画尚未结束,您可以使用setAnimationListener获得更好的效果


您可以参考上的讨论了解详细信息。

是的,但如何在我的代码中实现。.请参阅我的编辑,我已经在您当前触发旋转的位置编写了setUIRotation方法,例如上面的view.setRotationui\u rotation根据上面的代码,您已经有了lines view=findviewbydr.id.button1。。。view.setRotationui\u rotation;。但是setRotation会立即旋转视图。现在,不要调用setRotation,而是插入上面的行来代替setRotation,这样旋转将在500ms内逐渐进行。我尝试了,但是动画本身可以工作,但是它旋转了太多度。。我的意思是..基本上正确工作应该是:RotateAnimation rotate=新的RotateAnimation 0f,0,Animation.RELATIVE\u to\u SELF,0.5f,Animation.RELATIVE\u to\u SELF,0.5f;但是如果我写0而不是ui_旋转,当然动画不起作用,你会删除原始的setRotation吗?此外,如果ui_旋转是一个绝对方向值,则可能需要将其转换为与上一个值相比的相对值,例如,将上一个值保存在静态变量中并每次执行减法。您还可以将旋转范围限制在-180到180之间,即将其调整360,然后减去180
RotateAnimation rotate = new RotateAnimation(0f, ui_rotation, 
    Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);  

rotate.setDuration(500);
rotate.setFillAfter(true); 

view.startAnimation(rotate);