首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >OnClickListener - x,y事件的位置?

OnClickListener - x,y事件的位置?
EN

Stack Overflow用户
提问于 2009-12-28 05:03:33
回答 3查看 68.4K关注 0票数 88

我有一个从View派生的自定义视图。我希望在视图被单击时得到通知,以及单击发生的x,y位置。长点击也是如此。

看起来要这样做,我需要重写onTouchEvent()。但是,有没有办法从OnClickListener中获取事件的x,y位置呢?

如果不是,有什么好方法来判断一个运动事件是否是“真正的”点击还是长点击等等?onTouchEvent会快速连续地生成许多事件,等等。

EN

回答 3

Stack Overflow用户

发布于 2010-10-26 19:48:35

谢谢。这正是我要找的。我现在的代码是:

代码语言:javascript
复制
imageView.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            if (event.getAction() == MotionEvent.ACTION_DOWN){
                textView.setText("Touch coordinates : " +
                        String.valueOf(event.getX()) + "x" + String.valueOf(event.getY()));
            }
            return true;
        }
    });

这正是马克所要求的..。

票数 93
EN

Stack Overflow用户

发布于 2009-12-28 05:06:52

覆盖onTouchEvent(MotionEvent ev)

然后您可以执行以下操作:

代码语言:javascript
复制
ev.getXLocation()

或者类似的东西。喝一杯吧。

票数 3
EN

Stack Overflow用户

发布于 2020-01-28 01:14:15

您可以在Kotlin中创建一个扩展函数,如下所示:

代码语言:javascript
复制
fun View.setOnClickListenerWithPoint(action: (Point) -> Unit) {
    val coordinates = Point()
    val screenPosition = IntArray(2)
    setOnTouchListener { v, event ->
        if (event.action == MotionEvent.ACTION_DOWN) {
            v.getLocationOnScreen(screenPosition)
            coordinates.set(event.x.toInt() + screenPosition[0], event.y.toInt() + screenPosition[1])
        }
        false
    }
    setOnClickListener {
        action.invoke(coordinates)
    }
}

如果您需要长时间点击-只需替换setOnClickListener

我使用getLocationOnScreen()是因为我需要RecyclerView的ViewHolder的坐标

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1967039

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档