我是靠谱客的博主 矮小镜子,最近开发中收集的这篇文章主要介绍SystemUI KeyGuard之滑动解锁不流畅,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

起因是老板觉得解锁操作不流畅,要改。当时看过之后发现是因为手指的滑动操作,特别是在慢速向上滑动时容易被误判为误触,导致解锁失败,因而被认为解锁不流畅。因为当时修改的代码已经找不到了,这里只根据记忆记录一下改动的大概位置,为自己日后查阅方便计,可能个别有误。

frameworksbasepackagesSystemUIsrccomandroidsystemuistatusbarphonePanelView.java

boolean expand = flingExpands(vel, vectorVel, x, y)
                    || event.getActionMasked() == MotionEvent.ACTION_CANCEL
                    || forceCancel;

flingExpands函数返回true就解锁失败,false才能解锁。

主要修改的位置就是在flingExpands函数

protected boolean flingExpands(float vel, float vectorVel, float x, float y) {
        if (isFalseTouch(x, y)) {
            return true;
        }
        if (Math.abs(vectorVel) < mFlingAnimationUtils.getMinVelocityPxPerSecond()) {
            return getExpandedFraction() > 0.5f;
        } else {
            return vel > 0;
        }
    }

一开始准备在isFalseTouch函数加判断,使得滑动不容易被当作误触处理。

private boolean isFalseTouch(float x, float y) {
        if (!mStatusBar.isFalsingThresholdNeeded()) {
            return false;
        }
        if (mFalsingManager.isClassiferEnabled()) {
            return mFalsingManager.isFalseTouch();
        }
        if (!mTouchAboveFalsingThreshold) {
            return true;
        }
        if (mUpwardsWhenTresholdReached) {
            return false;
        }
        return !isDirectionUpwards(x, y);
    }

其中mFalsingManager.isClassiferEnabled()会调用

 if (mFalsingManager.isClassiferEnabled()) {
            return mFalsingManager.isFalseTouch();
        }

public boolean isClassiferEnabled() {
        return mHumanInteractionClassifier.isEnabled();
    }

最后调用到

frameworksbasepackagesSystemUIsrccomandroidsystemuiclassifierHumanInteractionClassifier.java

public boolean isFalseTouch() {
        if (mEnableClassifier) {
            float evaluation = mHistoryEvaluator.getEvaluation();
            boolean result = evaluation >= 5.0f;
            if (FalsingLog.ENABLED) {
                FalsingLog.i("isFalseTouch", new StringBuilder()
                        .append("eval=").append(evaluation).append(" result=")
                        .append(result ? 1 : 0).toString());
            }
            return result;
        }
        return false;
    }

似乎修改HumanInteractionClassifier.java的isFalseTouch也可以。

但是当时发现其他地方也调用isFalseTouch函数,如果修改这个函数其他也会受影响,所以最后修改都在flingExpands函数

具体的修改已经找不到,大概是把 flingExpands函数开始处的

if (isFalseTouch(x, y)) {
            return true;
        }的判断,移到了if else分支里。让慢速滑动不容易被直接当作误触而导致flingExpands函数直接返回true,而是先执行

if (Math.abs(vectorVel) < mFlingAnimationUtils.getMinVelocityPxPerSecond())判断。

 

 

最后

以上就是矮小镜子为你收集整理的SystemUI KeyGuard之滑动解锁不流畅的全部内容,希望文章能够帮你解决SystemUI KeyGuard之滑动解锁不流畅所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(44)

评论列表共有 0 条评论

立即
投稿
返回
顶部