当屏幕方向改变时如何旋转按钮而不旋转布局?

7

我希望在设备方向改变时,ImageButton能够旋转。它应该旋转90度、180度、270度和360度,并且其相对布局应保持稳定,只有按钮会移动。如何做到这一点?我已经进行了一些研究,但没有找到任何可以帮助我的东西。


你必须将任务分解成几个部分:1. 在旋转时停止Activity的重新创建。2. 捕捉旋转事件。3. 旋转视图... 这些部分都已经在SO上有了答案... 很难相信你没有找到任何东西... - Selvin
我不知道如何将我的问题分成那些部分。我是一个Android和Java的新手。我仍然有一个问题,因为我的活动方向是固定的,我必须使用加速度计检测方向,但我不知道该如何做。 - Lekstadt
1个回答

4
您可以通过重写onConfigurationChanged()方法来检测方向变化,示例如下:
@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    //call your rotate method here 
}

当您检测到屏幕方向变化事件后,您可以像这样在按钮上执行动画旋转:

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);
}

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

1
谢谢@drschultz,您的回答很棒,问题是我的活动方向是固定的,而onConfigurationChanged始终给出相同的结果。如果我知道如何解决这个问题,我会说的。有没有想法如何使用SensorEventListener检测x和y轴的方向? - Lekstadt
1
如果您的显示方向被锁定且无法旋转,则不幸的是,您需要使用传感器数据计算自己的旋转值。这就是事情变得相当复杂的地方。您可以在此处阅读有关Android传感器的文档,并且要查看一些代码示例,您可以在Stack Overflow上找到一些很好的答案,例如这个问题。但是,如果您仍然需要传感器方面的帮助,请开一个新的问题。 - NoChinDeluxe
关于这个问题,我想请您接受我的答案,因为它确实回答了您最初的问题(并且可能会帮助其他人解决类似的问题)。然后,如果您需要有关如何实现传感器数据的帮助,可以开一个新的问题。 - NoChinDeluxe
它会动画后返回到先前的方向。 - Tooniis
使用 super.onConfigurationChanged(newConfig) 只会执行它以前的操作,不使用它会导致应用崩溃(至少在KitKat上) 。 - horxCoder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接