MTK在android P上会出现在设置锁屏滑动时候,会出现快速灭屏亮屏闪亮现象。
在开发者模式关掉动画时不会出现此问题(Keyguard Scrim动画问题)
解决办法:setDuration(0),使keyguard scrim动画关闭,逻辑请打上callback查看。
堆栈打印参考: Android源码开发基本命令
/frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java
protected void updateScrims() {
setScrimInFrontAlpha(mCurrentInFrontAlpha);
setScrimBehindAlpha(mCurrentBehindAlpha);
dispatchScrimsVisible();
}
private void setScrimBehindAlpha(float alpha) {
setScrimAlpha(mScrimBehind, alpha);
}
private void setScrimInFrontAlpha(float alpha) {
setScrimAlpha(mScrimInFront, alpha);
}
private void setScrimAlpha(ScrimView scrim, float alpha) {
if (alpha == 0f) {
scrim.setClickable(false);
} else {
// Eat touch events (unless dozing or pulsing).
scrim.setClickable(mState != ScrimState.AOD && mState != ScrimState.PULSING);
}
updateScrim(scrim, alpha);
}
private void updateScrim(ScrimView scrim, float alpha) {
...
if (wantsAlphaUpdate || wantsTintUpdate) {
if (mAnimateChange) {
startScrimAnimation(scrim, currentAlpha);
} else {
// update the alpha directly
updateScrimColor(scrim, alpha, getCurrentScrimTint(scrim));
onFinished();
}
} else {
onFinished();
}
}
private void startScrimAnimation(final View scrim, float current) {
ValueAnimator anim = ValueAnimator.ofFloat(0f, 1f);
final int initialScrimTint = scrim instanceof ScrimView ? ((ScrimView) scrim).getTint() :
Color.TRANSPARENT;
anim.addUpdateListener(animation -> {
final float startAlpha = (Float) scrim.getTag(TAG_START_ALPHA);
final float animAmount = (float) animation.getAnimatedValue();
final int finalScrimTint = getCurrentScrimTint(scrim);
final float finalScrimAlpha = getCurrentScrimAlpha(scrim);
float alpha = MathUtils.lerp(startAlpha, finalScrimAlpha, animAmount);
alpha = MathUtils.constrain(alpha, 0f, 1f);
int tint = ColorUtils.blendARGB(initialScrimTint, finalScrimTint, animAmount);
updateScrimColor(scrim, alpha, tint);
dispatchScrimsVisible();
});
anim.setInterpolator(mInterpolator);
anim.setStartDelay(mAnimationDelay);
anim.setDuration(mAnimationDuration); //setDuration(0),使keyguard scrim动画关闭,就不会出现android p快速灭屏出现闪屏
anim.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
onFinished();
scrim.setTag(TAG_KEY_ANIM, null);
dispatchScrimsVisible();
if (!mDeferFinishedListener && mOnAnimationFinished != null) {
mOnAnimationFinished.run();
mOnAnimationFinished = null;
}
}
});
// Cache alpha values because we might want to update this animator in the future if
// the user expands the panel while the animation is still running.
scrim.setTag(TAG_START_ALPHA, current);
scrim.setTag(TAG_END_ALPHA, getCurrentScrimAlpha(scrim));
scrim.setTag(TAG_KEY_ANIM, anim);
anim.start();
}