Android onTouchListener 稳定判断触摸点坐标是否落在指定view上

Android onTouchListener 稳定判断触摸点坐标是否落在指定view上,第1张

概述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设置setontouchListener

touVIEw.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上所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1024527.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存