Android7.0锁屏上滑显示密码界面流程

一:核心类

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值