最新一直在做android6.0的项目,下面就主菜单日历图标日期刷新问题分享下,初来乍到,请多多关照,–):

解决这个问题主要考虑两个问题:1、怎样才能刷新日期。2、日期的现实位置

其他的也不多说了还是直接上代码吧,哈哈

1、CalendarIcon.java类中主要实现了当前日期的获取及日期居中显示(注意我这是直接做了0到9的图片然后通过算法来实现),具体如下:

package com.android.launcher3;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.BitmapFactory;
import android.graphics.Bitmap.Config;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.util.Log;
import android.view.View;

import java.util.Calendar;
import java.util.Locale;

public class CalendarIcon {
private Context mContext;

public CalendarIcon(Context context) {mContext = context;
}private int[] daysId = new int[]{//0-9的数字图片,大小根据主菜单日历背景大小来定R.drawable.calendar_0,R.drawable.calendar_1,R.drawable.calendar_2,R.drawable.calendar_3,R.drawable.calendar_4,R.drawable.calendar_5,R.drawable.calendar_6,R.drawable.calendar_7,R.drawable.calendar_8,R.drawable.calendar_9
};//得到日期,合成新图标
private Bitmap createCalendarBitmap(Bitmap src){String tag = "createBitmap";Log.d(tag, "create a new bitmap");if (src == null){return null;}final Calendar c = Calendar.getInstance();int day = c.get(Calendar.DAY_OF_MONTH);int x = src.getWidth();int y = src.getHeight();int oneNumX = 0;int oneNumY = 0;int twoNumX = 0;Bitmap newb = Bitmap.createBitmap(x, y, Config.ARGB_8888);Canvas cv = new Canvas(newb);cv.drawBitmap(src, 0, 0, null);if (day <= 9) {Bitmap oneNumBitmap = BitmapFactory.decodeResource(mContext.getResources(),daysId[0]);Bitmap twoNumBitmap = BitmapFactory.decodeResource(mContext.getResources(),daysId[day]);oneNumX = oneNumBitmap.getWidth();oneNumY = oneNumBitmap.getHeight();twoNumX = twoNumBitmap.getWidth();cv.drawBitmap(oneNumBitmap,x/2 - oneNumX , y/2 - oneNumY/2, null);cv.drawBitmap(twoNumBitmap,x/2 , y/2 - oneNumY/2, null);//cv.drawBitmap(oneNumBitmap, x/2- oneNumX/2 , y/2 - oneNumY/2, null); //show one number} else {Bitmap oneNumBitmap = BitmapFactory.decodeResource(mContext.getResources(),daysId[getDay(day)[0]]);Bitmap twoNumBitmap = BitmapFactory.decodeResource(mContext.getResources(),daysId[getDay(day)[1]]);oneNumX = oneNumBitmap.getWidth();oneNumY = oneNumBitmap.getHeight();twoNumX = twoNumBitmap.getWidth();cv.drawBitmap(oneNumBitmap,x/2 - oneNumX , y/2 - oneNumY/2, null);cv.drawBitmap(twoNumBitmap,x/2 , y/2 - oneNumY/2, null);}cv.save(Canvas.ALL_SAVE_FLAG);cv.restore();return newb;
}private int[] getDay(int day){return stringToInts(day+"");
}private int[] stringToInts(String s){int[] n = new int[s.length()];for(int i = 0;i<s.length();i++){n[i] = Integer.parseInt(s.substring(i,i+1));}return n;
}public Bitmap getDrable() {BitmapDrawable background = (BitmapDrawable) mContext.getResources().getDrawable(R.drawable.ic_launcher_calendar);Bitmap icon = createCalendarBitmap(background.getBitmap());return icon;
}

}

2、注册刷新日期广播
packages/apps/Launcher3/src/com/android/launcher3/LauncherAppState.java

filter.addAction(Intent.ACTION_TIME_CHANGED);
filter.addAction(Intent.ACTION_DATE_CHANGED);
filter.addAction(Intent.ACTION_TIME_TICK);

3、接收广播并并对时间保存处理
packages/apps/Launcher3/src/com/android/launcher3/LauncherModel.java

import android.os.SystemProperties;
import android.content.SharedPreferences;
import java.util.Calendar;

在onReveice方法中进行处理如下
// Innovatech:liuxiaohong:for calendar icon.
if ( (Intent.ACTION_DATE_CHANGED.equals(action)
|| Intent.ACTION_TIME_CHANGED.equals(action) || Intent.ACTION_TIME_TICK.equals(action))) {
final Calendar c = Calendar.getInstance();
int day = c.get(Calendar.DAY_OF_MONTH);
if (mCallbacks != null && (getDate(context) != day)) {
Callbacks callbacks = mCallbacks.get();
if (callbacks != null) {
saveDate(context, day);
forceReload();
}
}
}
// End of Innovatech-liuxiaohong

// Innovatech:liuxiaohong:for calendar icon.
private void saveDate(Context context, int date) {
SharedPreferences sp = context.getSharedPreferences(“now_date”,Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sp.edit();
editor.putInt(“nowdate”, date);
editor.commit();
}

private int getDate(Context context) {
SharedPreferences sp = context.getSharedPreferences(“now_date”,Context.MODE_PRIVATE);
int date = sp.getInt(“nowdate”, 1);
return date;
}
// End of Innovatech-liuxiaohong

4、launcher界面刷新图标
路径:package/apps/Launcher3/src/com/android/Launcher3/IconCache.java
@Thunk ContentValues updateCacheAndGetContentValues(LauncherActivityInfoCompat app,
boolean replaceExisting) {
……….
if ( “com.android.calendar”.equals(app.getComponentName().getPackageName()) ){
entry.icon = Utilities.createIconBitmap(new CalendarIcon(
mContext).getDrable(), mContext);
}
……….
}

private CacheEntry cacheLocked(ComponentName componentName, LauncherActivityInfoCompat info,
UserHandleCompat user, boolean usePackageIcon, boolean useLowResIcon) {
..............
if ( “com.android.calendar”.equals(app.getComponentName().getPackageName()) ){
entry.icon = Utilities.createIconBitmap(new CalendarIcon(
mContext).getDrable(), mContext);

...............

目前为止主菜单日历图标刷新日期的功能就基本实现了。

主菜单日历图标日期刷新相关推荐

  1. Mstar的Monitor方案笔记(六)——OSD添加新的主菜单

    OSD添加新的主菜单 一.主菜单素材的准备 1.1 图标 1.2 语言 二.素材转换 2.1 图标转换 2.2 语言转换 三.主菜单的添加 3.1 了解菜单流程 3.2 配置主菜单 3.3 画主菜单 ...

  2. android launcher 日历图标显示日期

    看到iphone上的日历图标上的数字会随着日期的变化而变化,最近在android平台上也研究了 一下,实现方法如下: 直接上源码 在launcher里改的 首先,在IconCache.java文件中, ...

  3. tinymce 工具栏 不显示_winform中MenuStrip主菜单、工具栏、状态栏、托盘、其他控件...

    MenuStrip主菜单 如果要写某个菜单的事件就双击那个菜单即可.设置热键 符号要加上&这个符号,快捷键shortcutkeys选择快捷键,快速选择菜单可以插入标准项,主菜单和工具栏都有这个 ...

  4. 我的世界服务器自定义ui,自定义主菜单CustomMainMenu mod教程

    MOD简介 这个MOD允许你使用一个JSON文件修改主菜单,可以修改几乎所有的菜单包含的内容/位置.此外,您还可以添加新的东西到你的菜比如一个幻灯片,网页链接或完全新的子菜单. 在你的第一次运行后,这 ...

  5. Unity自定义UI组件(六)日历、日期拾取器

    前言 考虑到工业项目中可能会利用到类似日历的工具,就比如选取某个时间节点,所以我结合UGUI源码开发了日历工具和日期拾取器工具,简单易用,接口齐全,可中文显示,外观可自定义.只需要导入脚本,即可在Hi ...

  6. C语言入门(二)主菜单操作

    (一).主菜单 在Turbo C 2.0主屏幕顶上一行, 显示下列内容:  File Edit Run Compile Project Options Debug Break/watch  除Edit ...

  7. java游戏开发杂谈 - 实现游戏主菜单

    经常玩游戏的同学,大家都知道,游戏都会有个主菜单,里面有多个菜单选项:开始游戏.游戏设置.关于游戏.退出游戏等等,这个菜单是怎么实现的呢. 有一定桌面软件开发基础的同学可能会想到,用JButton组件 ...

  8. unity打开除主菜单其他地方黑屏或白屏与unityHub安装unity简介

    unity打开除主菜单其他地方黑屏或白屏 新安装完成unity后 解决与原因 缘由 新安装完成unity后 打开unity进入项目后,只显示出主菜单栏,其他为白屏或黑屏.如下图 解决与原因 具体原因没 ...

  9. pycharm的主菜单消失如何解决(“File-Edit-Navigate-View”等菜单丢失)

    pycharm的主菜单消失如何解决 一.扯皮环节 二.解决方法 解决原理 解决步骤: 第一步(进入设置): 第二步(创建快捷键): 第三步(调出主菜单): 第四步(重置快捷键): 一.扯皮环节 正常视 ...

最新文章

  1. 第十一届全国大学生智能汽车竞赛获奖名单
  2. python语法基础学习-Python基础语法精心总结!看完都知道的可以往下继续学习了...
  3. mysql.sock的作用
  4. 2015届华为校园招聘机试题
  5. 微软自家的.Net下的JavaScript引擎——ClearScript
  6. LeetCode 121:买卖股票的最佳时机 思考分析
  7. python 可视化 画直线_用Python画江苏省地图,实现各地级市数据可视化
  8. SELinux系列(十一)——SELinux策略规则查看方法(seinfo和sesearch)详解
  9. html插入页码,Word添加页码后,每一页的页码都一样怎么办?
  10. 宁录哨兵机器人_单纯靠速度快银就打得过哨兵机器人?想多了,怼上这一版就不行!...
  11. Linux cpumask分析
  12. python常用写法
  13. Swift 编程语言教程(官方文档)
  14. 美团笔试题 淘汰分数
  15. 《JSP程序设计》报告
  16. 推荐 8 个我私藏的大厂技术大佬公众号 !助你高速成长!
  17. 专访强生医疗裴兴:后流量思维时代,医美行业迎来数字化大变局
  18. 苹果手机 jquery点击无效
  19. Shell实战--文件安全性的保证
  20. 空间统计:Moran's I(莫兰指数)

热门文章

  1. python 生成数据透视表后写入 Excel
  2. Pev:Postgres的可视化工具
  3. java遍历map values_java遍历Map的四种方式
  4. 机械师F117毒药 评测怎么样
  5. 使用Python实现音频双通道分离
  6. 行政管理学的研究对象是什么?
  7. 东大《实用写作》在线平时作业123
  8. microsoft office visio2007产品密钥
  9. 设置TextView的行间距
  10. 【开源教程8】疯壳·开源蓝牙心率防水运动手环-三轴计步伐