无论屏幕方向如何,都可以为同一个地方获取相同的(X,Y)MotionEvent

时间:2014-05-08 12:18:11

标签: android

在常规Android屏幕上,原点位于左上角,如果我将其倾斜到横向,则它将处于“新”左上角位置。

我需要获取触摸事件的(X,Y)位置,但始终考虑原点位于同一位置(无论屏幕方向如何,(0,0)应保持在一个角落)。

我不确定这是否是数学问题,或者这是否是Android问题。我正在使用getX(int i),因为我需要支持多个手指,但正如我所说,如果用户倾斜手机,原点将切换到位,我将得到(在这种情况下)错误(X,Y)。

感谢您的时间!

3 个答案:

答案 0 :(得分:1)

使用变量跟踪方向。然后检测方向变化并更改变量。

在我的活动中,我会声明一个变量:

int mOrientation;

onCreate()中设置当前方向:

mOrientation = getResources().getConfiguration();

然后我重写onConfigurationChanged()

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    mOrientation = newConfig.orientation;
}

然后在onTouchListener检查mOrientation中查看您是否需要交换x或y以确保您的坐标保持不变。如果你想假设坐标总是基于肖像,那么如果方向是横向,则getX()成为y值,getY()成为x值。

Configuration.ORIENTATION_LANDSCAPE和Configuration.ORIENTATION_PORTRAIT是您可以检查的int值。有关常量值的详细信息,请参阅here

答案 1 :(得分:0)

我假设您想获得屏幕坐标。检查以下代码

Display mdisp = getWindowManager().getDefaultDisplay();
    Point mdispSize = new Point();
    mdisp.getSize(mdispSize);
    int maxX = mdispSize.x; 
    int maxY = mdispSize.y;

答案 2 :(得分:0)

我通过使用getRotation()方法解决了这个问题,该方法以度为单位给出了旋转。之后我根据它改变了坐标。