21天打卡Andoid学到的一些小知识-第九十天

简介: 今天我们学习打卡的内容是:Android 9.0 10.0 Launcher3 时钟动态图标的定制化

今天我们学习打卡的内容是:Android 9.0 10.0 Launcher3 时钟动态图标的定制化


当然此次学习的文章链接将会放置文章末尾,有需要的朋友自行查看。


大家可能会有注意到,每逢重大节日,很多应用图标会自动调整,类似于春节版、国庆版等等。 这个功能最简单的实现方式可能就是发布一个新的版本了,直接替换相关资源,然后应用升级体验。 但是这种方式工作量较大,很不方便。并且像有些软件我们也没有注意到有应用升级就实现了图标替换,很神奇吧,在日常生活中我们定制化10.0的项目开发中,在Launcher3的app列表页,有时钟app的图标,图标是静态的但是有时开发的需要要求调成动态图标,时刻显示时间,这时就要把时钟图标替换成动态图标。


主要核心代码:

packages/apps/Launcher3/src/com/android/launcher3/BubbleTextView.java
packages/apps/Launcher3/src/com/android/launcher3/Launcher.java

在开发过程中会经常遇见时钟图标是静止的,这是图标就不能充分的体现出当前时刻,所以这是错误的,需要想办法去修改:


1 定义绘制时间图标类IconUtil.java


2 计算当前时间工具类 DateUtils.java


3 时钟工具类DeskClockUtil.java


4.BubbleTextView.java中设置动态图标


功能实现代码:

private void applyIconAndLabel(ItemInfoWithIcon info) {
String pkgname = "";
if (info.getIntent() != null && info.getIntent().getComponent() != null) {
pkgname = info.getIntent().getComponent().getPackageName();
}
android.util.Log.e("Launcher3","pkgname:"+pkgname);
FastBitmapDrawable iconDrawable = null;
if(pkgname.equals("com.android.deskclock")){
DeskClockUtil.getInstance().setListener(new DeskClockUtil.OnDeskClockIconChangeListener() {
@Override
public void onChange(Bitmap icon) {
FastBitmapDrawable deskiconDrawable = new FastBitmapDrawable(icon);
android.util.Log.e("Launcher3","deskiconDrawable:"+deskiconDrawable+"--icon:"+icon);
if(deskiconDrawable!=null)setIcon(deskiconDrawable);
}
}, getContext());
}else{
iconDrawable = DrawableFactory.INSTANCE.get(getContext())
.newIcon(getContext(), info);
}
//FastBitmapDrawable iconDrawable = DrawableFactory.INSTANCE.get(getContext())
//.newIcon(getContext(), info);
mDotParams.color = IconPalette.getMutedColor(info.iconColor, 0.54f);
    if(iconDrawable!=null)setIcon(iconDrawable);
    setText(info.title);
    if (info.contentDescription != null) {
        setContentDescription(info.isDisabled()
                ? getContext().getString(R.string.disabled_app_label, info.contentDescription)
                : info.contentDescription);
    }
}

学习收获;

加油,学完这些已经提升了很多,不过以后要坚持,珍惜CSDN的这个打卡活动,去努力的多学习相关自己感兴趣的知识,通过这个平台去不断的提升自己,这样才能在以后的工作中脱颖而出。

相关文章
|
11月前
|
Python
使用 Pandas 库时,如何处理数据的重复值?
在使用Pandas处理数据重复值时,需要根据具体的数据特点和分析需求,选择合适的方法来确保数据的准确性和唯一性。
761 64
|
运维 监控 网络协议
什么是运营商级 NAT (CGNAT)?
【4月更文挑战第16天】
5815 10
什么是运营商级 NAT (CGNAT)?
|
Ubuntu 安全 Linux
Linux(34)Rockchip RK3568 Ubuntu22.04和Debian 10上配置远程桌面工具
Linux(34)Rockchip RK3568 Ubuntu22.04和Debian 10上配置远程桌面工具
1469 0
|
Java Shell Linux
解决 centos下执行sh文件报错“/bin/bash^M: 坏的解释器:没有那个文件或目录” 问题
解决 centos下执行sh文件报错“/bin/bash^M: 坏的解释器:没有那个文件或目录” 问题
1635 0
|
5月前
|
物联网
如何在腾讯云等平台搭建自己的物联网MQTT服务器Broker
物联网技术及MQTT协议被广泛应用于各种场景。本文介绍物联网MQTT服务助手下载,如何搭建自己的物联网平台,并使用 “MQTT客户端调试工具”模拟MQTT设备,接入平台进行消息收发。
455 37
|
存储 Serverless 数据库
科普文:云计算服务类型IaaS, PaaS, SaaS, BaaS, Faas说明
本文介绍了云计算服务的几种主要类型,包括IaaS(基础设施即服务)、PaaS(平台即服务)、SaaS(软件即服务)、BaaS(后端即服务)和FaaS(函数即服务)。每种服务模式提供了不同的服务层次和功能,从基础设施的提供到应用的开发和运行,再到软件的交付使用,满足了企业和个人用户在不同场景下的需求。文章详细阐述了每种服务模式的特点、优势和缺点,并列举了相应的示例。云计算服务的发展始于21世纪初,随着互联网技术的普及,这些服务模式不断演进,为企业和个人带来了高效、灵活的解决方案。然而,使用这些服务时也需要注意服务的稳定性、数据安全性和成本等问题。
9294 5
|
Linux 开发者 iOS开发
QT:基于QMediaPlayer制作的视频播放器(最下方有整合包,可直接运行)
QMediaPlayer是Qt多媒体模块中的一个核心类,它提供了播放音频和视频内容的功能。这个类的设计旨在简化跨平台的媒体播放,使得开发者能够在多种操作系统(如Linux、Windows、macOS及移动平台)上轻松集成多媒体播放能力到他们的应用中,而无需关心底层实现细节。以下是关于QMediaPlayer的一些关键点:
1773 1
|
存储 编解码 文件存储
Windows 中的硬链接、目录联接(软链接)、符号链接、快捷方式
【10月更文挑战第5天】本文介绍了四种链接类型的概念及用途:硬链接允许通过多个入口访问同一文件内容,适用于不复制文件的情况下提供多处访问;软链接(目录联接)用于创建目录间的虚拟映射,可跨越文件系统;符号链接则更为灵活,可链接文件或目录并指向任意路径;快捷方式则是Windows中常用的一种特殊文件类型,便于快速访问程序、文件或网络资源。分别描述了它们的定义、工作原理、特点以及创建方法。
3037 10
|
缓存 Ubuntu 网络协议
ubuntu ifconfig命令找不到
综上所述,面对 `ifconfig`缺失的问题,用户应首先考虑使用替代命令或通过安装额外软件包来解决,同时注意权限管理和环境变量的正确配置。通过这些策略,可以确保在Ubuntu系统中高效、无障碍地管理网络配置。
586 0
|
XML Java Android开发
Android Studio App开发之通知推送Notification的讲解及实战(给用户推送信息实战)
Android Studio App开发之通知推送Notification的讲解及实战(给用户推送信息实战)
1687 0