一:核心类
SystemUI//src/com/android/systemui/statusbar/phone/NotificationPanelView.java SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java
SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java
SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBouncer.java
Keyguard/src/com/android/keyguard/KeyguardHostView.java
Keyguard/src/com/android/keyguard/KeyguardSecurityContainer.java
二、流程
在打开密码的情况下,锁屏界面上滑会显示密码界面,代码如下:
1:首先滑动的事件从NotificationPanelView.java中的onTouchEvent()中开始处理触摸事件:
@Override
public boolean onTouchEvent(MotionEvent event) {
if (mBlockTouches || mQsContainer.isCustomizing()) {
return false;
}
initDownStates(event);
if (mListenForHeadsUp && !mHeadsUpTouchHelper.isTrackingHeadsUp()
&& mHeadsUpTouchHelper.onInterceptTouchEvent(event)) {
mIsExpansionFromHeadsUp = true;
MetricsLogger.count(mContext, COUNTER_PANEL_OPEN_PEEK, 1);
}
if ((!mIsExpanding || mHintAnimationRunning)
&& !mQsExpanded
&& mStatusBar.getBarState() != StatusBarState.SHADE) {
mAfforanceHelper.onTouchEvent(event);
}
if (mOnlyAffordanceInThisMotion) {
return true;
}
mHeadsUpTouchHelper.onTouchEvent(event);
if (!mHeadsUpTouchHelper.isTrackingHeadsUp() && handleQsTouch(event)) {
return true;
}
if (event.getActionMasked() == MotionEvent.ACTION_DOWN && isFullyCollapsed()) {
MetricsLogger.count(mContext, COUNTER_PANEL_OPEN, 1);
updateVerticalPanelPosition(event.getX());
}
super.onTouchEvent(event);
return true;
}
代码中的super.onTouchEvent(event)是处理事件的过程,该super对应的是PanelView.java文件
2:PanelView.java
@Override
public boolean onTouchEvent(MotionEvent event) {
....
switch (event.getActionMasked()) {
case MotionEvent.ACTION_DOWN:
.....
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
trackMovement(event);
endMotionEvent(event, x, y, false /* forceCancel */);
break;
}
return !mGestureWaitForTouchSlop || mTracking;
}
private void endMotionEvent(MotionEvent event, float x, float y, boolean forceCancel) {
mTrackingPointer = -1;
if ((mTracking && mTouchSlopExceeded)
|| Math.abs(x - mInitialTouchX) > mTouchSlop
|| Math.abs(y - mInitialTouchY) > mTouchSlop
|| event.getActionMasked() == MotionEvent.ACTION_CANCEL
|| forceCancel) {
float vel = 0f;
float vectorVel = 0f;
if (mVelocityTracker != null) {
mVelocityTrack