首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Android - onTouch (ACTION_MOVE) -阻止视图退出屏幕

Android - onTouch (ACTION_MOVE) -阻止视图退出屏幕
EN

Stack Overflow用户
提问于 2017-07-18 19:15:26
回答 1查看 887关注 0票数 0

enter image description here在这个问题上我已经被困了很长时间,而互联网似乎也不想提供帮助。

我有一个自定义视图,可以使用onTouchListener和随附的事件在屏幕上拖动。我需要这个拖拽在它退出屏幕时停止。我已经得到了屏幕尺寸,我可以检测到什么时候我需要发生一些事情,但我想不出一个好方法来“迫使”视图停留在边界内。

如果我设置了一些布尔逻辑,它会冻结视图,使其无法拖回。如果我保存到该标记的点,然后在检测到边界时将视图重新设置为这些点,它看起来很糟糕(跳跃)。

我正在寻找保持在边界上的视图,即使用户不断移动他们的手指,当用户从边界向后拖动时才返回到“播放”(如果你明白我的意思?!)。我的想法就像一堵假想的墙。

下面是相关代码,因此您可以了解我所处的位置

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
case MotionEvent.ACTION_MOVE:
                RelativeLayout.LayoutParams moveParam = (RelativeLayout.LayoutParams) v.getLayoutParams();

                float maxTop = (mHeight-mPeepHole)/2;
                Log.d(TAG, "onTouch: maxTop = " + maxTop);
                if (moveParam.topMargin > maxTop || moveParam.topMargin < -(mHeight-mPeepHole)/2)
                {
                    Log.d(TAG, "onTouch: OUT OF BOUNDS HEIGHT");
                    // this fires when I need it to, all good.
                    // here is where I need some logic

                }

                if (moveParam.leftMargin > (mWidth-mPeepHole)/2 || moveParam.leftMargin < -(mWidth-mPeepHole)/2)
                {
                    Log.d(TAG, "onTouch: OUT OF BOUNDS WIDTH");
                    // and here...
                }

                moveParam.leftMargin = x - Position_X;
                moveParam.topMargin = y - Position_Y;
                moveParam.rightMargin = -500; // ignore this at present
                moveParam.bottomMargin = -500; // ignore this at present
                v.setLayoutParams(moveParam);

                break;

..。

更详细地说,x是不应该退出屏幕的中心点。视图可以从任何点触摸和拖动,但当x命中屏幕边缘时,视图应始终停止

EN

回答 1

Stack Overflow用户

发布于 2017-07-18 19:21:46

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
moveParam.leftMargin = Math.max(0,Math.min(screen_width, x - Position_X- view.getWidth())); 

这将完全阻止视图移出屏幕。你基本上要做的就是不让左边距低于0,或者超过屏幕的末端。

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

https://stackoverflow.com/questions/45175283

复制
相关文章
Android View的事件分发机制
在用户触摸屏幕时,总是离用户触摸点最近的控件来响应触摸事件,如果最近的控件没有实现响应事件,那这个事件会不断的向父类传递,直到有view响应时,就会将触摸反馈的事件流传递给这个view的onTouchEvent()方法,如下图: 如果CustmoView中不响应onTouchEvent(),那面事件会传递给LayoutView中,如果在LayoutView中响应了onTouchEvent(),那面事件就不会再传递给RootView了。
艳龙
2021/12/16
3600
Android View的事件分发机制
View的事件分发及滑动冲突的解决
一次触摸事件,ACTION_DOWN和ACTION_UP是必须存在的,ACTION_MOVE视情况而定。
程序员小何SS
2021/11/30
8910
Carson带你学Android:手把手教你学会手势识别应用 GestureDetector
下面,我将结合实例,详细介绍GestureDetector的使用接口 & 使用类。
Carson.Ho
2022/03/24
1.6K0
Carson带你学Android:手把手教你学会手势识别应用 GestureDetector
Carson带你学Android:手把手带你深入分析事件分发机制!
此处需要特别说明:事件列,即指从手指接触屏幕至手指离开屏幕这个过程产生的一系列事件。一般情况下,事件列都是以DOWN事件开始、UP事件结束,中间有无数的MOVE事件。
Carson.Ho
2022/01/21
8160
Carson带你学Android:手把手带你深入分析事件分发机制!
FloatWindowUtils 实现及事件冲突解决详解
悬浮窗即可以显示在宿主应用之外的 View 视图,理论上任何 View 都能以悬浮窗形式展示在宿主应用之外甚至锁屏界面,一般在工具类应用中使用的比较多,通过悬浮窗可以很方便的从外界与宿主应用进行交互,例如金山词霸的锁屏单词功能、AirDroid 的录制屏幕菜单、360优化大师的清理悬浮按钮等。
SkyRiN
2018/11/20
2.9K0
【Android】手把手教你上滑解锁的效果
最近,公司开发的APP中要实现类似上滑解锁效果的推荐页,捣腾了两天,基本实现了效果,附效果图如上。接下来和大家聊聊如何实现这样的效果。
代码咖啡
2018/08/28
2.7K0
【Android】手把手教你上滑解锁的效果
Android 手势识别应用:手把手教你学会 GestureDetector(含实例讲解)
下面,我将结合实例,详细介绍GestureDetector的使用接口 & 使用类。
Carson.Ho
2020/06/10
10.9K0
Android高级进阶之路【二】十分钟彻底弄明白 View 事件分发机制
此处需要特别说明:事件列,即指从手指接触屏幕至手指离开屏幕这个过程产生的一系列事件。一般情况下,事件列都是以DOWN事件开始、UP事件结束,中间有无数的MOVE事件。
做个快乐的码农
2021/11/18
6650
Android高级进阶之路【二】十分钟彻底弄明白 View 事件分发机制
实现一个网易云音乐的 BottomSheetDialog
作者:林冠宏 / 指尖下的幽灵 掘金:https://juejin.im/user/587f0dfe128fe100570ce2d8 博客:http://www.cnblogs.com/linguanh/ GitHub : https://github.com/af913337456/ 腾讯云专栏: https://cloud.tencent.com/developer/user/1148436/activities ---- Github 开源地址 目录 前序 直观对比下 g
林冠宏-指尖下的幽灵
2018/04/13
2.2K0
实现一个网易云音乐的 BottomSheetDialog
Android 事件分发机制
事件分发机制在android中非常常见,比如:手势滑动,自定义View,多点触控都有它的身影。事件分发的顺序是:Activity->GroupView->View,GrounpView包括五大布局,ListView和GridView等,View包括TextView,ImageView等。我们今天就来搞一下。
android_薛之涛
2018/10/09
1.7K0
Android 事件分发机制
Android onTouch事件传递机制解析
记得刚开始学习Android的时候,对于onTouch相关的事件一头雾水。分不清onTouch(),onTouchEvent()和OnClick()之间的关系和先后顺序,觉得有必要搞清onTouch事件传递的原理。经过一段时间的琢磨以及网上相关博客的介绍,总算是了解了触摸事件传递的机制了,顺便写一篇博客来记录一下。下面就让我们来看看吧。
俞其荣
2022/07/28
8050
Android onTouch事件传递机制解析
android view事件分发机制
首先我们先写个简单的例子来测试View的事件转发的流程~ 1、案例 为了更好的研究View的事件转发,我们自定以一个MyButton继承Button,然后把跟事件传播有关的方法进行复写,然后添加上日志~ MyButton package com.example.zhy_event03;   import android.content.Context;   import android.util.AttributeSet;   import android.util.Log;   import andr
xiangzhihong
2018/01/30
1.2K0
android view事件分发机制
Android 中屏幕点击事件的实现Android onTouchEvent, onClick及onLongClick的调用机制
在android下,事件的发生是在监听器下进行,android系统能够响应按键事件和触摸屏事件,事件说明例如以下:
全栈程序员站长
2022/09/07
3.8K0
Android 中屏幕点击事件的实现Android onTouchEvent, onClick及onLongClick的调用机制
重新复习Android View事件分发
一个Activity包含了一个Window对象,这个对象是由PhoneWindow来实现的。PhoneWindow将DecorView作为整个应用窗口的根View,而这个DecorView又将屏幕划分为两个区域:一个是TitleView,另一个是ContentView,而我们平时所写的就是展示在ContentView中
老马的编程之旅
2022/06/22
3620
重新复习Android View事件分发
Android触摸事件_简述兴奋在突触的传递过程
在实际开发中,经常会遇到与触屏事件有关的问题,最典型的一个就是滑动冲突。比如在使用SliddingMenu菜单的时候,可能会与ViewPager或者其他的一些带有滑动事件的View相冲突,再比如ScrollView嵌套ListView相冲突等等。还有就是在自定义控件的时候,需要处理一些事件时候,也必须把逻辑处理好,父 view 和子view 都需要接收事件,然后处理。如果不明白事件传递机制,很难开发出需要的效果。因此就需要对Android消息传递机制有一个基本的理解与认识,这样才有可能解决开发过程中的需求与问题。
全栈程序员站长
2022/11/04
7220
Android触摸事件_简述兴奋在突触的传递过程
.NET/C# 阻止屏幕关闭,阻止系统进入睡眠状态
在 Windows 系统中,一段时间不操作键盘和鼠标,屏幕便会关闭,系统会进入睡眠状态。但有些程序(比如游戏、视频和演示文稿)在运行过程中应该阻止屏幕关闭,否则屏幕总是关闭,会导致体验会非常糟糕。
walterlv
2023/10/22
9160
.NET/C# 阻止屏幕关闭,阻止系统进入睡眠状态
View,ViewGroup的Touch事件的分发机制
ViewGroup的事件分发机制 我们用手指去触摸Android手机屏幕,就会产生一个触摸事件,但是这个触摸事件在底层是怎么分发的呢?这个我还真不知道,这里涉及到操作硬件(手机屏幕)方面的知识,也就是Linux内核方面的知识,我也没有了解过这方面的东西,所以我们可能就往上层来分析分析,我们知道Android中负责与用户交互,与用户操作紧密相关的四大组件之一是Activity, 所以我们有理由相信Activity中存在分发事件的方法,这个方法就是dispatchTouchEvent(),我们先看其源码吧
xiangzhihong
2018/01/30
1.2K0
View,ViewGroup的Touch事件的分发机制
Android面试老生常谈的 View 事件分发机制,看这一篇就够了!
在 Android 开发当中,View 的事件分发机制是一块很重要的知识。不仅在开发当中经常需要用到,面试的时候也经常被问到。
程序员徐公
2021/06/01
6870
Android面试老生常谈的 View 事件分发机制,看这一篇就够了!
点击加载更多

相似问题

如何阻止ontouch Action_Move和Action_touch事件进入android中的父视图

11

在onTouch ACTION_MOVE中更改视图高度

210

将onTouch ACTION_MOVE限制为一个视图

23

在Android中获取onTouch ACTION_MOVE事件的速度

46

处理多视图的Android onTouch

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文