今天我们学习打卡的内容是: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的这个打卡活动,去努力的多学习相关自己感兴趣的知识,通过这个平台去不断的提升自己,这样才能在以后的工作中脱颖而出。