点击屏幕底部时Android TouchEvent位置Y值大于屏幕高度

问题描述 投票:0回答:1

我正在开发一个信息亭应用程序,我试图创建一种行为,当用户单击屏幕的所有 4 个角时,我运行代码以退出信息亭模式。我完成了大部分代码的设置和工作,但遇到了两个条件未被调用的问题。调试后,我注意到 MouseEvent 返回的 y 值大于屏幕高度,但我无法确定原因。单击屏幕的右上角和左上角效果良好,但底部是出现问题的地方。我有什么遗漏的吗?

我尝试使用 this 示例来查找边界,但有点困惑,因为 maxY 似乎位于屏幕底部。 maxY 验证似乎失败了,因为即使屏幕 maxY 为 736,我触摸时显示的 y 值也高于该值。有人可以告诉我我错过了什么或做错了什么吗?

我的布局边界设置为匹配宽度和匹配高度。

@NotNull
private View.OnTouchListener setupMotionListener() {
    return new View.OnTouchListener() {

        @Override
        public boolean onTouch(View arg0, MotionEvent arg1) {
            int count = arg1.getPointerCount();
            if(count == 4) {
                for (int i = 0; i < count; i++) {
                    x[i] = arg1.getX(i);
                    y[i] = arg1.getY(i);
                }
                Display mdisp = getWindowManager().getDefaultDisplay();
                Point mdispSize = new Point();
                mdisp.getSize(mdispSize);
                int maxX = mdispSize.x;
                int maxY = mdispSize.y;

                for (int i = 0; i < count; i++) {
                    if (x[i] >= 0 && x[i] <= 100 && y[i] >= 0 && y[i] <= 100) {
                        closeClicked.set(0, true);
                    } else if (x[i] >= 0 && x[i] <= 100 && y[i] <= maxY && y[i] >= (maxY - 100)) {
                        closeClicked.set(1, true);
                    } else if (x[i] <= maxX && x[i] >= (maxX - 100) && y[i] >= 0 && y[i] <= 100) {
                        closeClicked.set(2, true);
                    } else if (x[i] <= maxX && x[i] >= (maxX - 100) && y[i] <= maxY && y[i] >= (maxY - 100)) {
                        closeClicked.set(3, true);
                    }

                }

                if (!closeClicked.contains(false)) {
                    SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
                    SharedPreferences.Editor editor = settings.edit();
                    editor.putBoolean("isKioskEnabled", false);
                    editor.commit();
                    Intent kiosk = new Intent(KioskActivity.this, MainActivity.class);
                    kiosk.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    getApplicationContext().startActivity(kiosk);
                } else {
                    closeClicked = Arrays.asList(false, false, false, false);
                    x = new float[4];
                    y = new float[4];
                }
            } else {
                x = new float[4];
                y = new float[4];
            }
            return true;
        }
    };
}

我的 maxX 或 screenWidth 是:1280 我的 maxY 或 screenHeight 是:736

触摸 4 个角时我的 y 值是(注意触摸事件大于屏幕高度):

同样,我在所有 4 个角上的 x 值是:

android multi-touch kiosk-mode android-touch-event
1个回答
0
投票

请注意,

mdispSize.y
返回屏幕高度,而是返回可用屏幕高度,即ScreenHeight - 导航栏的高度。因此,如果您单击屏幕的两个最低角(即导航栏上),那么确实 arg1.getX(...) > mdispSize.y。

使用

DisplayMetrics displayMetrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(displayMetrics); maxY = displayMetrics.heightPixels;
相反。

© www.soinside.com 2019 - 2024. All rights reserved.