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.rhkb.cn/news/314273.html

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

相关文章

【JAVA】UDP与TCP套接字编程

目录 一、UDP数据报套接字编程 1、DatagramSocket API 2、DatagramPacket API 3、InetSocketAddress API 4、示例一 5、示例二 二、TCP流套接字编程 1、ServerSocket API 2、Socket API 3、TCP中的长短连接 4、示例一 5、示例二 一、UDP数据报套接字编程 1、Datag…

施耐德 Unity Pro 编程软件导入导出变量

适用范围 施耐德中高端PLC&#xff0c;使用的编程软件为 UnityPro &#xff08;最新版更名为 Ecostructure Control Expert&#xff09; 中端 PLC&#xff1a;Premium&#xff0c;M340高端 PLC&#xff1a;Quantum&#xff0c;M580 导出/导入变量 导出变量可导出【变量和 FB…

Java设计模式 _创建型模式_原型模式(Cloneable)

一、原型模式 1、原型模式&#xff08;Prototype Pattern&#xff09;是用于创建重复的对象&#xff0c;同时又能保证性能比较好。一般对付出较大代价获取到的实体对象进行克隆操作&#xff0c;可以提升性能。 2、实现思路&#xff1a; &#xff08;1&#xff09;、需要克隆的…

C基础语法速览

叠甲&#xff1a;以下文章主要是依靠我的实际编码学习中总结出来的经验之谈&#xff0c;求逻辑自洽&#xff0c;不能百分百保证正确&#xff0c;有错误、未定义、不合适的内容请尽情指出&#xff01; 文章目录 1.数据类型1.1.数据类型的常见分类1.2.数据类型的符号修饰1.3.数据…

面向对象设计与分析40讲(25)中介模式、代理模式、门面模式、桥接模式、适配器模式

文章目录 门面模式代理模式中介模式 之所以把这几个模式放到一起写&#xff0c;是因为它们的界限比较模糊&#xff0c;结构上没有明显的差别&#xff0c;差别只是语义上。 这几种模式在结构上都类似&#xff1a; 代理将原本A–>C的直接调用变成&#xff1a; A–>B–>…

git 基础知识(全能版)

文章目录 一 、git 有三个分区二、git 基本操作1、克隆—git clone2、拉取—git fetch / git pull3、查看—git status / git diff3.1 多人开发代码暂存技巧 本地代码4、提交—git add / git commit / git push5、日志—git log / git reflog6、删除—git rm ‘name’7、撤销恢…

【C++】详解初始化列表,隐式类型转化,类静态成员,友元

前言 初始化列表是对构造函数内容的补充&#xff0c;小编会详细的讲解初始化列表的概念&#xff0c;特性&#xff0c;注意点。这是本篇内容的重头戏&#xff0c;小编会先提一个问题来抛砖引玉。 隐式类型转换顾名思义&#xff0c;首先它不需要主动转换&#xff0c;然后就是不同…

关于SSL加密,您应该知道什么?

SSL加密&#xff0c;全称为安全套接字层加密&#xff0c;是一种网络安全协议&#xff0c;主要用于在网络通信中提供隐私和数据完整性。它通过在客户端和服务器之间建立一个加密的通道&#xff0c;确保数据在传输过程中不被窃取或篡改。随着互联网的普及和电子商务的快速发展&am…

工厂数字化三部曲/业务、数据和IT融合

工厂数字化三部曲: 业务、数据和IT融合 在当今数字化转型的潮流中&#xff0c;企业面临着将业务、数据和IT融合的挑战和机遇。数字化转型不仅是技术上的升级&#xff0c;更是对企业运营模式和管理体系的全面优化和重构。通过业务“数字化”阶段的细致分析和整合&#xff0c;以及…

数据结构:时间复杂度和空间复杂度

目录 1. 如何衡量一个算法的好坏2. 算法效率3. 时间复杂度3.1 时间复杂度的概念3.2 大O的渐进表示法3.3 推导大O阶方法3.4 常见时间复杂度计算举例 3.空间复杂度 1. 如何衡量一个算法的好坏 下面求斐波那契数列的算法好还是不好&#xff0c;为什么&#xff1f;该如何衡量一个算…

Spring MVC系列之九大核心组件

概述 Spring MVC是面试必问知识点其一&#xff0c;Spring MVC知识体系庞杂&#xff0c;有以下九大核心组件&#xff1a; HandlerMappingHandlerAdapterHandlerExceptionResolverViewResolverRequestToViewNameTranslatorLocaleResolverThemeResolverMultipartResolverFlashMa…

Spark AQE 导致的 Driver OOM问题

背景 最近在做Spark 3.1 升级 Spark 3.5的过程中&#xff0c;遇到了一批SQL在运行的过程中 Driver OOM的情况&#xff0c;排查到是AQE开启导致的问题&#xff0c;再次分析记录一下&#xff0c;顺便了解一下Spark中指标的事件处理情况 结论 SQLAppStatusListener 类在内存中存…

精酿啤酒:酿造工艺的自动化与智能化发展

随着科技的不断进步&#xff0c;自动化与智能化已成为啤酒酿造工艺的重要发展方向。Fendi Club啤酒紧跟时代潮流&#xff0c;积极推动酿造工艺的自动化与智能化发展&#xff0c;旨在提高生产效率、确保产品品质和满足市场需求。 Fendi Club啤酒引入自动化生产设备。他们采用自动…

[最新]CentOS7设置开机自启动Hadoop集群

安装好Hadoop后我们可以使用开机自启动的方式&#xff0c;节约敲命令的时间。注意是centOS7版本!!!和centOS6版本区别非常大!!! 1、切换到系统目录 [rootmaster ~]# cd /etc/systemd [rootmaster systemd]# ll total 32 -rw-r--r-- 1 root root 720 Jun 30 23:11 bootcha…

线性代数基础2矩阵

矩阵是什么 矩阵就是二维数组&#xff0c;下面是一个 m 乘 n 的矩阵&#xff0c;它有 m 行&#xff0c;n 列&#xff0c;每行每列上面都有元素&#xff0c;每个元素都有行标i 和列标 j&#xff0c; a ij 。简称m n矩阵&#xff0c;记作&#xff1a; 注意a11的索引是 A[0,0]。…

【OceanBase诊断调优】——hpet(高精度时钟源)引起的CPU高问题排查

最近总结一些诊断OCeanBase的一些经验&#xff0c;出一个【OceanBase诊断调优】专题出来&#xff0c;也欢迎大家贡献自己的诊断OceanBase的方法。 1. 前言 昨天在问答区帮忙排查一个用户CPU高的问题&#xff0c;帖子链接&#xff1a;《刚刚新安装的OceanBase集群&#xff0c;…

数据结构与算法解题-20240426

这里写目录标题 面试题 08.04. 幂集367. 有效的完全平方数192. 统计词频747. 至少是其他数字两倍的最大数718. 最长重复子数组 面试题 08.04. 幂集 中等 幂集。编写一种方法&#xff0c;返回某集合的所有子集。集合中不包含重复的元素。 说明&#xff1a;解集不能包含重复的子…

【数据结构】合并两个有序链表

将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 Definition for singly-linked list.struct ListNode {int val;struct ListNode *next;};typedef struct ListNode ListNode; struct ListNode* mergeTwoLists(struct Lis…

信息系统项目管理师0072:集成基础(5信息系统工程—5.3系统集成—5.3.1集成基础)

点击查看专栏目录 文章目录 5.3系统集成5.3.1集成基础5.3系统集成 随着信息技术的发展,系统集成逐步成为信息系统实施中一项重要的工作。此处的系统集成概念专指计算机系统的集成,包括计算机硬件平台、网络系统、系统软件、工具软件、应用软件的集成,围绕这些系统的相应咨询…

稳态视觉诱发电位 (SSVEP) 分类学习系列 (4) :Temporal-Spatial Transformer

稳态视觉诱发电位分类学习系列:Temporal-Spatial Transformer 0. 引言1. 主要贡献2. 提出的方法2.1 解码的主要步骤2.2 网络的主要结构 3. 结果和讨论3.1 在两个数据集下的分类效果3.2 与基线模型的比较3.3 消融实验3.4 t-SNE 可视化 4. 总结欢迎来稿 论文地址&#xff1a;http…