android - 画布触摸事件拾取滑动以退出沉浸式模式
问题描述
我有一个 SurfaceView,它使用画布根据触摸事件进行渲染。该活动还使用沉浸式模式使其全屏显示。
问题是当用户从屏幕顶部滑动退出沉浸式模式时,画布会拾取滑动。
如何避免在画布中处理这些触摸事件?
SurfaceView 类
public class PEQSurfaceView extends SurfaceView implements
SurfaceHolder.Callback
{
@Override
public void surfaceCreated(SurfaceHolder holder)
{
// make the GamePanel focusable so it can handle events
requestFocus();
setFocusable(true);
setFocusableInTouchMode(true);
}
@Override
public boolean onTouchEvent(MotionEvent event)
{...}
布局的侧面也有一些标准控件,我注意到这些也以同样的方式受到影响。即如果向下滑动触摸进度条,进度条将继续
解决方案
不确定它是否符合您的期望,但作为一个建议,我会这样做:
1)留下屏幕的一些顶部区域以进行沉浸式移动手势。
2)然后在onTouchEvent
方法中检查 Y 坐标是否在该顶部区域内(我认为10dp
就足够了)然后返回 false(这将禁用处理中的事件SurfaceView
)。
因此,如果用户swipe down
从屏幕的顶部边缘开始,它会起作用
可能您需要设置一些 bool 变量,并ACTION DOWN
在该特殊区域内将其设置为 true ACTION_UP
,然后在 ACTION_CANCEL 上释放它,然后在ACTION_MOVE
if this内部,flag == true
您需要返回 true,因为特殊手势尚未完成。
推荐阅读
- python - 我正在尝试在我的规范化函数中使用我在 getData 函数中创建的列表
- javascript - 如何将状态从一个功能组件传递到另一个由按钮组件呈现的功能组件?
- javascript - 加载第三方 javascript 库
- javascript - 使用 mysql2 async/await 时出现“发送到客户端后无法设置标头”错误
- javascript - 单击提交后无法自动清除输入字段(React)
- javascript - Angular Reactive 表单:无法在页面加载时绑定复选框选中的属性
- c# - 拒绝访问路径“/storage/emulated/0/Android/data/com.companyname/files”
- react-native - 在 onSubmitEditing 之后调用 onChangeText 时如何清除 TexInput?
- node.js - 无法使用“npm install firebase”添加 firebase 以响应应用程序
- javascript - Authorize.net 嵌入 iFrame accept.js 响应事务