【问题标题】:MotionEvent getOrientation() returning orientation of screen instead of orientation of contact?MotionEvent getOrientation()返回屏幕方向而不是接触方向?
【发布时间】:2017-05-09 16:57:02
【问题描述】:

我不确定我是否误解了MotionEventgetOrientation() 函数,但是通过阅读documentation,我的理解是它应该返回由接触点和垂直轴。但是,它似乎是在报告屏幕的方向。

在这里,我刚刚为 MainActivity 覆盖了 onTouchEvent。当ActionMove 事件触发时,有一些TextView 会发生变化,它们会显示长轴、短轴的长度以及椭圆的方向。

public boolean onTouchEvent(MotionEvent event) {
    int index = event.getActionIndex();
    int action = event.getActionMasked();
    int pointerId = event.getPointerId(index);

    switch (action) {
        case MotionEvent.ACTION_MOVE:
            orientation.setText(String.valueOf(event.getAxisValue(MotionEvent.AXIS_ORIENTATION)));
            touchMajor.setText(String.valueOf(event.getToolMajor(pointerId)));
            touchMinor.setText(String.valueOf(event.getToolMinor(pointerId)));
            break;

    }
    return super.onTouchEvent(event);
}

TouchMajor 和 Minor 工作正常,但我的问题是方向不会随接触而改变。相反,当我旋转屏幕以使屏幕方向发生变化时:

  • 90 度顺时针 = -PI/2
  • 直立 = 0.0
  • 90 度逆时针 = PI/2

报告的方向只是这三个中的一个。

所以我的问题是,我怎样才能正确地抓住接触区域的方向?我在 Android 6.0.1 上使用三星 Galaxy S6。

【问题讨论】:

    标签: java android touchscreen


    【解决方案1】:

    似乎即使在这么晚的日期,大多数设备也不能正确支持 getOriention()。见Android finger detection - Orientation and ellipse

    【讨论】:

    • 是的,我在寻找答案时遇到了这篇文章。自从它在 2014 年发布以来,我希望情况有所改变,但我想由于我一直在测试的手机同样旧,我必须看看我是否能拿到更新的手机。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-02
    • 1970-01-01
    • 1970-01-01
    • 2022-01-10
    • 2019-02-18
    相关资源
    最近更新 更多