Android onTouchListener 稳定判断触摸点坐标是否落在指定view上 湖南文理学院 • 2022-5-23 • app • 阅读 75 概述onTouch事件中判断触摸点坐标是否落在指定view上判断触摸点是否准确落在指定view的范围内,以确定那个view是否能够响应触摸时的某些事件。一、event.getX()与getY()例如我对一个touView设置setOnTouchListenertouView.setOnTouchListener((v,event)->{ switch(event. @H_301_3@ontouch事件中判断触摸点坐标是否落在指定vIEw上判断触摸点是否准确落在指定vIEw的范围内,以确定那个vIEw是否能够响应触摸时的某些事件。一、event.getX()与getY()例如我对一个touVIEw设置setontouchListenertouVIEw.setontouchListener((v, event) -> { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: break; case MotionEvent.ACTION_MOVE: break; case MotionEvent.ACTION_UP: case MotionEvent.ACTION_CANCEL: break; } return false;});even.getX()以及getY()获取到的坐标将是以touVIEw左上角为原点建立的坐标系下的坐标。二、vIEw.gettop()与getleft()、getRight()、getBottom()而当我们touVIEw.gettop()以及getleft(),getRight(),getBottom()获取到的坐标将是以touVIEw的vIEwGroup左上角为原点建立的坐标系下的坐标。三、代码实现知道这些基础知识就好办了,判断触摸点是不是在指定vIEw内就判断x与y方向是否都满足在范围内即可。/** * 判断触摸点是否在目标vIEw上 * 前提是touchVIEw与tarVIEw在同一vIEwGroup中 * * @param touVIEw 响应触摸事件的vIEw * @param tarVIEw 触摸点需要落在的目标vIEw * @param x event.getX() * @param y event.getY() * @return 是否落在tarVIEw上 */ private boolean pointInVIEw(VIEw touVIEw, VIEw tarVIEw, float x, float y) { boolean xDir, yDir; //x方向 if (tarVIEw.getleft() >= touVIEw.getRight())//tarVIEw在右边 xDir = (x >= tarVIEw.getleft() - touVIEw.getleft() && x <= tarVIEw.getRight() - touVIEw.getleft()); else if (tarVIEw.getRight() <= touVIEw.getleft()) //tarVIEw在左边 xDir = (x <= tarVIEw.getRight() - touVIEw.getleft() && x >= tarVIEw.getleft() - touVIEw.getleft()); else //tarVIEw在重叠范围 xDir = x >= tarVIEw.getleft() - touVIEw.getleft() && x <= tarVIEw.getRight() - touVIEw.getleft(); //y方向 if (tarVIEw.gettop() >= touVIEw.getBottom())//tarVIEw在下边 yDir = (y >= tarVIEw.gettop() - touVIEw.gettop() && y <= tarVIEw.getBottom() - touVIEw.gettop()); else if (tarVIEw.getBottom() <= touVIEw.gettop()) //tarVIEw在上边 yDir = (y <= tarVIEw.getBottom() - touVIEw.gettop() && y >= tarVIEw.gettop() - touVIEw.gettop()); else //tarVIEw在重叠范围 yDir = y >= tarVIEw.gettop() - touVIEw.gettop() && y <= tarVIEw.getBottom() - touVIEw.gettop(); return xDir && yDir; }注意一定得判断x方向的左右边界和y方向的上下边界。四、QQ聊天取消发送语音的BUG当我们长按输入语音时,我们的手指移动到垃圾桶图标上就应该显示取消该次语音的发送。可是我发现,这个取消发送的判定点居然在上方聊天内容显示区域也可以被判定到。你可以自己试一试,截止我发文时间,这个BUG依然存在,我已经反馈了。这个估计就是在ACTION_MOVE事件下对判定条件边界考虑补充分产生的BUG。 看明白了吗,欢迎下方纠错。 总结 以上是内存溢出为你收集整理的Android onTouchListener 稳定判断触摸点坐标是否落在指定view上全部内容,希望文章能够帮你解决Android onTouchListener 稳定判断触摸点坐标是否落在指定view上所遇到的程序开发问题。如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。 欢迎分享,转载请注明来源:内存溢出原文地址: http://outofmemory.cn/web/1024527.html 判断 稳定 坐标 触摸 指定 赞 (0) 打赏 微信扫一扫 支付宝扫一扫 湖南文理学院 一级用户组 0 0 生成海报 太赞了!2021最新Android开发者学习路线,offer拿到手软 上一篇 2022-05-23 Android:Adapter组件的使用笔记 下一篇 2022-05-23 发表评论 请登录后评论... 登录后才能评论 提交 评论列表(0条)
评论列表(0条)