SystemUI KeyButtonView setDarkIntensity 解析

继承自 ImageView
KeyButtonDrawable

intensity为0时按键颜色为白色。

在这里插入图片描述

intensity为1时黑色为的调用堆栈:

java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.String.length()' on a null object referenceat com.android.systemui.statusbar.policy.KeyButtonView.setDarkIntensity(KeyButtonView.java:459)at com.android.systemui.statusbar.phone.ButtonDispatcher.setDarkIntensity(ButtonDispatcher.java:225)at com.android.systemui.statusbar.phone.NavigationBarTransitions.applyDarkIntensity(NavigationBarTransitions.java:192)at com.android.systemui.statusbar.phone.LightBarTransitionsController.dispatchDark(LightBarTransitionsController.java:200)at com.android.systemui.statusbar.phone.LightBarTransitionsController.setIconTintInternal(LightBarTransitionsController.java:196)at com.android.systemui.statusbar.phone.LightBarTransitionsController.lambda$animateIconTint$0(LightBarTransitionsController.java:187)at com.android.systemui.statusbar.phone.LightBarTransitionsController.lambda$animateIconTint$0$LightBarTransitionsController(Unknown Source:0)at com.android.systemui.statusbar.phone.-$$Lambda$LightBarTransitionsController$PJRveQsGC7aANrqdSv3tRYb3x7c.onAnimationUpdate(Unknown Source:2)at android.animation.ValueAnimator.animateValue(ValueAnimator.java:1566)at android.animation.ValueAnimator.animateBasedOnTime(ValueAnimator.java:1357)at android.animation.ValueAnimator.doAnimationFrame(ValueAnimator.java:1489)at android.animation.AnimationHandler.doAnimationFrame(AnimationHandler.java:146)at android.animation.AnimationHandler.access$100(AnimationHandler.java:37)at android.animation.AnimationHandler$1.doFrame(AnimationHandler.java:54)at android.view.Choreographer$CallbackRecord.run(Choreographer.java:970)at android.view.Choreographer.doCallbacks(Choreographer.java:796)at android.view.Choreographer.doFrame(Choreographer.java:727)at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:957)at android.os.Handler.handleCallback(Handler.java:938)at android.os.Handler.dispatchMessage(Handler.java:99)at android.os.Looper.loop(Looper.java:223)at android.app.ActivityThread.main(ActivityThread.java:7677)at java.lang.reflect.Method.invoke(Native Method)at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
Process: com.android.systemui, PID: 644
java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.String.length()' on a null object referenceat com.android.systemui.statusbar.phone.LightBarTransitionsController.animateIconTint(LightBarTransitionsController.java:180)at com.android.systemui.statusbar.phone.LightBarTransitionsController.setIconsDark(LightBarTransitionsController.java:160)at com.android.systemui.statusbar.phone.LightBarController.updateStatus(LightBarController.java:223)at com.android.systemui.statusbar.phone.LightBarController.onStatusBarModeChanged(LightBarController.java:125)at com.android.systemui.statusbar.phone.LightBarController.onStatusBarAppearanceChanged(LightBarController.java:118)at com.android.systemui.statusbar.phone.StatusBar.onSystemBarAppearanceChanged(StatusBar.java:2299)at com.android.systemui.statusbar.CommandQueue$H.handleMessage(CommandQueue.java:1234)at android.os.Handler.dispatchMessage(Handler.java:106)at android.os.Looper.loop(Looper.java:223)at android.app.ActivityThread.main(ActivityThread.java:7677)at java.lang.reflect.Method.invoke(Native Method)at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)

哪里调用StatusBar的onSystemBarAppearanceChanged方法?

DisplayPolicy调用 onSystemBarAppearanceChanged 方法
待续。

public void setDarkIntensity(float intensity) {mState.mDarkIntensity = intensity;final int color = (int) ArgbEvaluator.getInstance().evaluate(intensity, mState.mLightColor, mState.mDarkColor);updateShadowAlpha();setColorFilter(new PorterDuffColorFilter(color, Mode.SRC_ATOP));
}
java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.String.length()' on a null object referenceat com.android.systemui.statusbar.policy.KeyButtonDrawable.setColorFilter(KeyButtonDrawable.java:205)at com.android.systemui.statusbar.policy.KeyButtonDrawable.setDarkIntensity(KeyButtonDrawable.java:128)at com.android.systemui.statusbar.policy.KeyButtonView.setImageDrawable(KeyButtonView.java:353)at com.android.systemui.statusbar.phone.ButtonDispatcher.setImageDrawable(ButtonDispatcher.java:140)at com.android.systemui.statusbar.phone.NavigationBarView.updateNavButtonIcons(NavigationBarView.java:695)at com.android.systemui.statusbar.phone.NavigationBarView.reorient(NavigationBarView.java:1085)at com.android.systemui.statusbar.phone.NavigationBarView.onAttachedToWindow(NavigationBarView.java:1205)at android.view.View.dispatchAttachedToWindow(View.java:20479)at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3489)at android.view.ViewGroup.addViewInner(ViewGroup.java:5278)at android.view.ViewGroup.addView(ViewGroup.java:5064)at android.view.ViewGroup.addView(ViewGroup.java:5004)at android.view.ViewGroup.addView(ViewGroup.java:4976)at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1308)at android.app.FragmentManagerImpl.addAddedFragments(FragmentManager.java:2431)at android.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2210)at android.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2166)at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2067)at android.app.FragmentManagerImpl$1.run(FragmentManager.java:742)at android.os.Handler.handleCallback(Handler.java:938)at android.os.Handler.dispatchMessage(Handler.java:99)at android.os.Looper.loop(Looper.java:223)at android.app.ActivityThread.main(ActivityThread.java:7677)at java.lang.reflect.Method.invoke(Native Method)at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)

KeyButtonDrawable的创建过程:

Process: com.android.systemui, PID: 644
android.view.InflateException: Binary XML file line #20 in com.android.systemui:layout/navigation_bar: Attempt to
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.String.length()' on a at com.android.systemui.statusbar.policy.KeyButtonDrawable.<init>(KeyButtonDrawable.java:108)at com.android.systemui.statusbar.policy.KeyButtonDrawable.<init>(KeyButtonDrawable.java:102)at com.android.systemui.statusbar.policy.KeyButtonDrawable.create(KeyButtonDrawable.java:512)at com.android.systemui.statusbar.policy.KeyButtonDrawable.create(KeyButtonDrawable.java:495)at com.android.systemui.statusbar.policy.KeyButtonDrawable.create(KeyButtonDrawable.java:476)at com.android.systemui.statusbar.policy.KeyButtonDrawable.create(KeyButtonDrawable.java:486)at com.android.systemui.statusbar.phone.NavigationBarView.getDrawable(NavigationBarView.java:607)at com.android.systemui.statusbar.phone.NavigationBarView.updateIcons(NavigationBarView.java:528)at com.android.systemui.statusbar.phone.NavigationBarView.reloadNavIcons(NavigationBarView.java:519)at com.android.systemui.statusbar.phone.NavigationBarView.onFinishInflate(NavigationBarView.java:931)at android.view.LayoutInflater.rInflate(LayoutInflater.java:1134)at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1082)at android.view.LayoutInflater.inflate(LayoutInflater.java:680)at android.view.LayoutInflater.inflate(LayoutInflater.java:532)at com.android.systemui.statusbar.phone.NavigationBarFragment.onCreateView(NavigationBarFragment.java:496)at android.app.Fragment.performCreateView(Fragment.java:2505)at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1303)at android.app.FragmentManagerImpl.addAddedFragments(FragmentManager.java:2431)at android.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2210)at android.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2166)at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2067)at android.app.FragmentManagerImpl$1.run(FragmentManager.java:742)at android.os.Handler.handleCallback(Handler.java:938)at android.os.Handler.dispatchMessage(Handler.java:99)at android.os.Looper.loop(Looper.java:223)at android.app.ActivityThread.main(ActivityThread.java:7677)at java.lang.reflect.Method.invoke(Native Method)at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)

在创建NavigationBarFragment的时候,获取 mDockedIcon的时候创建了一个KeyButtonDrawable。

Home Drawable的创建过程:

NavigationBarView 的 getHomeDrawable方法。

Home Button的创建过程:

home.xml 定义了 home 按键, 其图标是NavigationBarView的 mHomeDefaultIcon。
NavigationBarInflaterView的 createView方法inflate了一个 home 。

KeyButtonDrawable 绘制

canvas.drawBitmap(mState.mLastDrawnIcon, null, bounds, mIconPaint);
mLastDrawnIcon 就是资源文件的icon,

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/652370.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

个人音乐播放网站项目(SpringBoot+Linux部署上线)

在做完第一个博客系统项目以后&#xff0c;接着做下一个项目&#xff1a;音乐播放网站项目&#xff0c;此项目应用的技术栈和第一个项目是差不多的&#xff0c;即算是学完SSM等知识以后的两个入门级Java开发项目吧。 此项目包含的核心功能有&#xff1a; 一、登录、注册、退出…

【stomp 实战】Spring websocket使用详解和基本原理

spring框架对websocket有很好的支持&#xff0c;stomp协议作为websocket的子协议&#xff0c;Spring也做了很多封装&#xff0c;让我们在开发中易于使用。 学习使用Spring的Websocket模块&#xff0c;当然最好的办法就是看官网说明了。本篇文章对官网做一些简述和个人的理解。 …

计算完美数

一、概要 完全数&#xff08;Perfect number&#xff09;&#xff0c;又称完美数或完备数&#xff0c;是一些特殊的自然数。 它所有的真因子&#xff08;即除了自身以外的约数&#xff09;的和&#xff08;即因子函数&#xff09;&#xff0c;恰好等于它本身。 例如&#xf…

多家企业机密数据遭Lockbit3.0窃取,亚信安全发布《勒索家族和勒索事件监控报告》

本周态势快速感知 本周全球共监测到勒索事件87起&#xff0c;与上周相比勒索事件大幅下降。美国依旧为受勒索攻击最严重的国家&#xff0c;占比45%。 本周Cactus是影响最严重的勒索家族&#xff0c;Lockbit3.0和Bianlian恶意家族紧随其后&#xff0c;从整体上看Lockbit3.0依旧…

在Elasticsearch 7.9.2中安装IK分词器并进行自定义词典配置

Elasticsearch是一个强大的开源搜索引擎&#xff0c;而IK分词器是针对中文文本分析的重要插件。本文将引导您完成在Elasticsearch 7.9.2版本中安装IK分词器、配置自定义词典以及验证分词效果的全过程。 步骤一&#xff1a;下载IK分词器 访问IK分词器的GitHub发布页面&#xf…

【Unity动画系统】动画基本原理与Avater骨骼复用

动画基本原理 动画片段文件是一个描述物体变化状态的文本文件 在Unity中创建的资源文件大多都是YAML语言编写的文本文件 Curves表示一种变化状态&#xff0c;为空的话则没有记录任何内容 位置变化后的旋转变化状态&#xff1a; 动画文件里的Path名字要相同才能播放相同的动画 …

神经网络参数初始化

&#x1f4bd;参数初始化是神经网络训练过程中的一个重要步骤。在构建神经网络时&#xff0c;我们需要为权重和偏置等参数赋予初始值。对于偏置&#xff0c;通常可以将其初始化为0或者较小的随机数。然而&#xff0c;对于权重w的初始化&#xff0c;我们通常会采用更加复杂的方法…

【吊打面试官系列】Java高并发篇 - 如何在两个线程间共享数据?

大家好&#xff0c;我是锋哥。今天分享关于 【 如何在两个线程间共享数据&#xff1f;】面试题&#xff0c;希望对大家有帮助&#xff1b; 如何在两个线程间共享数据&#xff1f; 在两个线程间共享变量即可实现共享。 一般来说&#xff0c;共享变量要求变量本身是线程安全的&a…

GEE数据集——1763 年至 2023 年美国地下水井数据库(USGWD)包括水井用途、位置、深度和容量

简介 地下水井是实现地下水监测、开采和使用的重要基础设施&#xff0c;对环境、水安全和经济发展具有重要影响。尽管地下水井非常重要&#xff0c;但美国一直缺乏一个统一的数据库来收集和标准化有关这些水井的特征和位置的信息。为了弥补这一空白&#xff0c;我们创建了一个…

图像处理之Retinex算法(C++)

图像处理之Retinex算法&#xff08;C&#xff09; 文章目录 图像处理之Retinex算法&#xff08;C&#xff09;前言一、单尺度Retinex&#xff08;SSR&#xff09;1.原理2.代码实现3.结果展示 二、多尺度Retinex&#xff08;MSR&#xff09;1.原理2.代码实现3.结果展示 三、带色…

MySQL:ACCESS DENIED FOR USER‘ROOT‘@‘IP地址

起因是使用若依的环境连接数据库时报错&#xff1a;远程数据库连接异常&#xff0c;最终原因是密码错误&#xff0c;且看分解 07:12:06.895 [main] INFO c.r.RuoYiApplication - [logStartupProfileInfo,686] - The following 1 profile is active: "druid" 07:12:…

Windows系统下将MySQL数据库表内的数据全量导入Elasticsearch

目录 下载安装Logstash 配置Logstash配置文件 运行配置文件 查看导入结果 使用Logstash将sql数据导入Elasticsearch 下载安装Logstash 官网地址 选择Windows系统&#xff0c;需下载与安装的Elasticsearch相同版本的&#xff0c;下载完成后解压安装包。 配置Logstash配…