【问题标题】:Getting the same (X,Y) of a MotionEvent for the same place regardless of screen orientation无论屏幕方向如何,在同一个地方获取相同的 MotionEvent (X,Y)
【发布时间】:2014-05-08 12:18:10
【问题描述】:

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

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

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

感谢您的宝贵时间!

【问题讨论】:

    标签: android


    【解决方案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

    【讨论】:

    • 这更接近,但不太正确。我在这里用图片说明了它:i.imgur.com/MTznQX4.jpg?1 在所有情况下我都想得到 (10, 700)。在没有任何修复的情况下,我在顶部得到 (700, 300),在右侧得到类似 (40, 10) 的东西。只是切换它们只会对一个参数起作用。但是,如果我在右侧执行x = width - getX() 并在顶部执行y = height - getY() 之类的操作,我会得到正确的答案吗?但是我必须知道两种横向方向之间的区别
    • 知道了。不知道如何解释反向横向方向...如果我想到什么我会添加评论。
    • 我使用 getRotation() 来查找设备的旋转并据此更改 x 和 y。感谢您的帮助!
    • @user2296440 太好了,很高兴你能弄明白。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      我假设您想要获取屏幕坐标。检查下面的代码

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

      【讨论】:

      • 实际上不,无论屏幕方向如何,我都想获得 MotionEvent 的相同 (X,Y) 位置。如果您的屏幕在屏幕上的同一位置是纵向/横向的,则 event.getX() 将为您提供不同的值
      猜你喜欢
      • 1970-01-01
      • 2013-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-09
      • 1970-01-01
      相关资源
      最近更新 更多