android - 获取以原点为中心的触摸手势归一化坐标

标签 android

我有一个线性布局,我分配了一个 onTouchListener。我已经获得了设备的宽度和高度,但问题是,原点位于屏幕的左上角,它给我的坐标例如 (534, 211)。

我希望原点位于屏幕中心,我希望屏幕坐标的两端为 1。

我该如何实现?

这是我到目前为止得到的代码...

Display display = getWindowManager().getDefaultDisplay();
        Point size = new Point();
        display.getSize(size);
        int width = size.x;
        int height = size.y;

        System.out.println(width + " " + height);

        mGLView.setOnTouchListener(new OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {
                System.out.println(event.getX() + " " + event.getY());
                return false;
            }

        });

这是一张图片,显示了我正在尝试实现的坐标系类型: enter image description here

最佳答案

您应该从 MotionEvent 获取坐标(getX()getY())并将它们标准化为您想要的坐标.例如:

@Override
public boolean onTouch(View v, MotionEvent event)
{
    float x = 2f * (event.getX() / v.getWidth()) - 1f;
    float y = -2f * (event.getY() / v.getHeight()) + 1f;

    System.out.println(x + " " + y);
    return false;
}

(假设您想要相对于 View 本身的坐标系——在您的代码中,您还查询了显示器的尺寸,但我不确定为什么)。

关于android - 获取以原点为中心的触摸手势归一化坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24216787/

相关文章:

java - 在不使用 protected 的情况下处理抽象类的正确方法是什么?

android - alertDialog 框中的 AutoCompleteTextView

Android - 在手机上授权计算机

android - 如何通过kivy向android应用程序添加字体?

android - 自定义 SeekBar Drawable Android

java - Android - 使用签名的 APK 时应用程序崩溃

android ListView后台处理

android - 错误 :(49) undefined reference to 'cv::Stitcher::createDefault(bool)' in using OpenCV native in Android

Android Connectivity BroadcastReceiver 的触发速度不够快

java - 多线程更新表面 View Canvas