我的 android 应用程序使用 Y 轴加速度计来控制游戏中的角色。
这在大多数手机上都可以正常工作,但是在我的 Galaxy Tab 2 10.1 上,轴似乎颠倒了,我必须手动更改输入才能正常工作。
我想编写一个简单的条件语句,可以根据设备类型进行交换,但是我不确定最好的做法是什么。我敢肯定,在我问这个问题之前,有人会遇到这个问题。
如何确定设备是桌子还是移动设备以更改加速度计轴?
我的 android 应用程序使用 Y 轴加速度计来控制游戏中的角色。
这在大多数手机上都可以正常工作,但是在我的 Galaxy Tab 2 10.1 上,轴似乎颠倒了,我必须手动更改输入才能正常工作。
我想编写一个简单的条件语句,可以根据设备类型进行交换,但是我不确定最好的做法是什么。我敢肯定,在我问这个问题之前,有人会遇到这个问题。
如何确定设备是桌子还是移动设备以更改加速度计轴?
我认为这与设备的默认方向有关,它往往是手机的纵向或平板电脑的横向。这里有一个关于这个的问题:如何在 Android 上检查设备自然(默认)方向(即获取例如 Motorola Charm 或 Flipout 的横向),根据我的经验,我会说这是最好的答案。要理解的重要一点是,无论显示器在做什么(横向、纵向等),传感器使用的 xyz 轴都不会改变。
我发现最好的方法是检查设备上的屏幕尺寸,并根据设备使用哪个轴来确定一个布尔值。这是经过测试并且工作得很好。
// 检查屏幕布局以确定设备是否为平板电脑。
public boolean isTablet(Context context) {
boolean xlarge = ((context.getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) == 4);
boolean large = ((context.getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_LARGE);
return (xlarge || large);
}
// Changle Accelx or Accely input 基于以上(我使用的是OpenGLES 1.1)
if (isTablet(glGame)) {
world.update(deltaTime, game.getInput().getAccelX());
}
if (!isTablet(glGame)) {
world.update(deltaTime, game.getInput().getAccelY());
}