时间:2020/12/14
之前公司不允许csdn,笔记写在其它地方。最近整理过来
recent界面上滑进allapps响应区域问题
问题背景:
- 有recentView时,recent下方一点点就可以上滑进allapps
- 没有recentView时,,只有在搜索栏或者hotseat才能滑进allapps
问题分析:
所有界面的滑动分析根,从draglayer出发
1、baseDraglayer:
onInterceptTouchEvent--》findActiveController--》findControllerToHandleTouch
2、findControllerToHandleTouch中循环所有mControllers(DragController、AbstractStateChangeTouchController、TaskViewTouchController),看看是哪个部分处理这个滑动的动作。
3、对于allapps界面,处理在AbstractStateChangeTouchController的onControllerInterceptTouchEvent中
//canInterceptTouch 判断是否拦截触摸事件,如果不拦截,直接返回false
//如果拦截,则自己消费触摸事件,滑出allapps界面
4、PortraitStatesTouchController.canInterceptTouch:
这个方法中,判断:1、当前是否正在做动画 2、allapps主界面3、overview界面、4其它界面(比如launcher主界面)
每个模式下有不同的判断条件判断。
5、此次我们分析的问题点在于,overview界面,走PortraitOverviewStateTouchHelper.Java:
从以下逻辑可以看出,当recentsView没有时,只有当用户触摸在hotseat才能滑动
当recentsView有时,触摸区域的判断在recentview往下所有范围
boolean canInterceptTouch(MotionEvent ev) {
if (mRecentsView.getChildCount() > 0) {
// Allow swiping up in the gap between the hotseat and overview.
return ev.getY() >= mRecentsView.getChildAt(0).getBottom();
} else {
// If there are no tasks, we only intercept if we're below the hotseat height.
return isTouchOverHotseat(mLauncher, ev);
}
}
以上是上滑坐标判断部分。
================================================