首页 > 解决方案 > 画布触摸事件拾取滑动以退出沉浸式模式

问题描述

我有一个 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)
   {...}

布局的侧面也有一些标准控件,我注意到这些也以同样的方式受到影响。即如果向下滑动触摸进度条,进度条将继续

标签: androidandroid-canvassurfaceviewandroid-immersive

解决方案


不确定它是否符合您的期望,但作为一个建议,我会这样做:
1)留下屏幕的一些顶部区域以进行沉浸式移动手势。
2)然后在onTouchEvent方法中检查 Y 坐标是否在该顶部区域内(我认为10dp就足够了)然后返回 false(这将禁用处理中的事件SurfaceView)。

因此,如果用户swipe down从屏幕的顶部边缘开始,它会起作用

可能您需要设置一些 bool 变量,并ACTION DOWN在该特殊区域内将其设置为 true ACTION_UP,然后在 ACTION_CANCEL 上释放它,然后在ACTION_MOVEif this内部,flag == true您需要返回 true,因为特殊手势尚未完成。


推荐阅读