5

我想在设备方向更改时旋转ImageButton。它应该旋转90,180,270和360度的角度,其相对布局应保持稳定,只有按钮移动。如何才能做到这一点?我做了一些研究,但没有发现可以帮助我的任何事情。如何在方向改变时旋转按钮而不旋转布局?

+0

您必须将任务分解为碎片:1停止旋转活动的重新创建。 2.捕捉旋转。 3.视图的旋转....这些片断中的每一个都已经有了答案,所以在这里......很难相信你没有找到任何东西...... – Selvin

+0

我不知道如何划分我的问题到这些片断。我是Android和Java的新手。我仍然有问题,因为我的活动方向是固定的,我必须用加速度计检测方向,不知道如何去做。 –

回答

2

您可以通过重写这样检测的方向变化:

public void rotateView(View view) { 
    Button button = (Button) view.findViewById(R.id.some_button); 
    RotateAnimation rotateAnimation = new RotateAnimation(0, 360); 
    rotateAnimation.setDuration(2000); 
    button.startAnimation(rotateAnimation); 
} 

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 
    //call your rotate method here 
} 

然后,一旦你检测取向变化时,你可以在这样一个按钮进行动画旋转

您可以在构造函数RotateAnimation中设置开始和结束角度,然后设置动画应持续的时间(以毫秒为单位)。然后,只需在要制作动画的视图上调用startAnimation()即可。

+0

谢谢@drschultz,你的回答很好,问题是我的活动方向是固定的,onConfigurationChanged总是给出相同的结果。如果我知道如何解决这个问题,我会说。有关如何使用SensorEventListener检测轴x和y方向的任何想法? –

+1

如果您的显示方向被锁定并且无法旋转,那么很遗憾,您需要使用传感器数据计算自己的旋转值。这是事情变得相当复杂的地方。你可以在这里阅读关于[Android传感器的文档](http://developer.android.com/guide/topics/sensors/sensors_overview.html),并看到一些代码示例,你可以找到堆栈溢出的一些很好的答案像[这里这个问题](http://stackoverflow.com/questions/27106607/get-rotation-and-display-in-degrees)。但是如果你仍然需要传感器的帮助,我会提出一个新的问题。 – NoChinDeluxe

+0

至于这个问题,我会恳请你接受我的回答,因为它确实回答你原来的问题(并且可能在将来也会用类似的问题帮助其他人)。然后,如果您需要关于如何实现传感器数据的帮助,则可以打开一个新问题。 – NoChinDeluxe