繁体   English   中英

通过点击获取X和Y坐标

[英]Get X and Y coordinates onClick

我曾经有一个onTouchListener ,但我需要将其更改为onClickListener ,因为我不想触及长比短触摸记录不同的值。 在我的代码行之一中,我有X[i]=Integer.valueOf((int)event.getX()); ,这与工作完全onTouchListener ,但有一个onClickListener ,我得到的错误event cannot be resolved

我的问题是,是否有event.getX()一个功能onClickListener

这是我的代码的一部分:

    touchLayout.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            X[i]=Integer.valueOf((int)event.getX());
        }
    });
}

提前致谢

我非常确定您无法获得单击x和y坐标,因为OnClick是由视图的触摸侦听器的内部实现触发的事件。 当用户抬起他的手指并且其移动的距离不超过特定距离(称为触摸倾斜)时,将触发该操作。

另一方面,如果实现自己的触摸侦听器,则可以检测到触摸手势的开始和结束位置,并使用这些坐标进行所需的操作。 它看起来像这样:

    view.setOnTouchListener(new View.OnTouchListener() {
        public boolean onTouch(View v, MotionEvent event) {
            if (event.getAction() == MotionEvent.ACTION_DOWN) {
                startX = (int) event.getX();
                startY = (int) event.getY();
            }

            if (event.getAction() == MotionEvent.ACTION_UP) {
                int endX = (int) event.getX();
                int endY = (int) event.getY();
                int dX = Math.abs(endX - startX);
                int dY = Math.abs(endY - startY);


                if (Math.sqrt(Math.pow(dX, 2) + Math.pow(dY, 2)) <= touchSlop) {
                    // Your on click logic here...
                    return true;
                }
            }
       return false;
    }
});

这里的touchSlop变量保存在将手势视为滚动之前您可以移动多少。 您可以通过调用ViewConfiguration.get(context).getScaledTouchSlop()获得此值。

您可能应该看一下,这可能会对您有所帮助:

@Override
    public boolean onTouchEvent(MotionEvent event) {
        int x = (int)event.getX();
        int y = (int)event.getY();
        switch (event.getAction()) {

            case MotionEvent.ACTION_MOVE:
                 Log.i("222","X-"+x+"===Y="+y);

        }
    return false;
    }

你可以试试这个

      public void onClick(View view) {
        int[] values = new int[2]; 
        view.getLocationOnScreen(values);
        Log.d("X & Y",values[0]+" "+values[1]);
    }

方法中

      getLocationOnScreen(values);

您可以做任何您想做的事情。如果在您的情况下不起作用,请告诉我

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM