我有一个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)
{...}
布局在侧面也有一些标准控件,我注意到这些控件也以相同的方式受到影响。即如果向下滑动触摸进度条,则进度条将会前进
答案 0 :(得分:0)
不确定它是否符合您的期望,但作为建议,我会这样做:
1)在屏幕顶部留出一些空间,以保持沉浸式移动手势。
2)然后在onTouchEvent
方法中检查Y坐标是否在该顶部区域内(我认为10dp
就足够了),然后返回false(这将禁用处理SurfaceView
中的事件)
因此,如果用户从屏幕顶部边缘swipe down
开始使用
可能您需要设置一些布尔变量,并在该特殊区域内的ACTION DOWN
上将其设置为true,然后在ACTION_UP
和ACTION_CANCEL上释放它,然后在ACTION_MOVE
内释放它flag == true
,因为特殊手势尚未完成,您需要返回true。