桌面小控件的实例-----数字时钟

为了实现一个数字时钟的桌面组件,开发者需要在程序界面上定义8个ImageView,其中6个ImageView用于显示小时、分钟、秒钟的数字,另外两个ImageView用于显示小时、分钟、秒钟之间的冒号。

为了让桌面组件实时的显示当前时间,程序需要每个1秒更新一次程序界面上的6个ImageView,让它们显示当前小时、分钟、秒钟的数字即可。

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;

import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.ComponentName;
import android.content.Context;
import android.os.Handler;
import android.os.Message;
import android.widget.RemoteViews;

public class DigitalClock extends AppWidgetProvider{
  private Timer timer = new Timer();
  private AppWidgetManager appWidgetManager;
  private Context context;
  //将0~9的液晶数字图片定义成数组
  private int[] digits = new int[]{
    R.drawable.su01,
    R.drawable.su02,
    R.drawable.su03,
    R.drawable.su04,
    R.drawable.su05,
    R.drawable.su06,
    R.drawable.su07,
    R.drawable.su08,
    R.drawable.su09,
    R.drawable.su10,
  };
  //将显示小时、分钟、秒钟的ImageView定义成数组
  private int[] digitViews = new int[]{
    R.id.image01,
    R.id.image02,
    R.id.image04,
    R.id.image05,
    R.id.image07,
    R.id.image08,
  };
  @Override
  public void onUpdate(Context context, AppWidgetManager appWidgetManager,
            int[] appWidgetIds) {
    this.appWidgetManager = appWidgetManager;
    this.context = context;
    //定义计时器
    timer = new Timer();
    //启动周期性调度
    timer.schedule(new TimerTask() {

      @Override
      public void run() {
        // 发送空消息,通知界面更新
        handler.sendEmptyMessage(0x123);
      }
    },0,1000);
  }
  private Handler handler = new Handler(){
    public void handleMessage(Message msg) {
      if(msg.what == 0x123){
        RemoteViews views =
              new RemoteViews(context.getPackageName(), R.layout.activity_digital_clock);
        //定义SimpleDateFormat对象
        SimpleDateFormat df = new SimpleDateFormat("HHmmss");
        //将当前时间格式化成HHmmss的形式
        String timeStr = df.format(new Date());
        for(int i = 0 ; i< timeStr.length();i++){
          //将第i个数字字符串转换为对应的数字
          int num = timeStr.charAt(i) - 48;
          //将第i个图片设为对应的液晶数字图片
          views.setImageViewResource(digitViews[i], digits[num]);
        }
        //将APPWidgetProvider子类实例包装成ComponentName对象
        ComponentName componentName = new ComponentName(context, DigitalClock.class);
        //调用APPWidgetProvider将RemoteViews添加到ComponentName中
        appWidgetManager.updateAppWidget(componentName, views);
      }
      super.handleMessage(msg);
    }
  };
}

上面的程序中粗体字代码将会根据程序的时间字符串动态更新6个ImageView所显示的液晶数字图片,这样即可通过液晶数字来显示当前时间了。

在AndroidManifest.xml文件中添加如下代码片段来定义该桌面的小控件:

<receiver
  android:name=".DigitalClock"
  android:label="@string/app_name"
  >
  <!-- 将该BroadcastReceiver当成桌面小控件 -->
  <intent-filter >
    <action android:name="android.appwidget.action.APPWIDGET_UPDATE"/>
  </intent-filter>
  <!-- 指定桌面小控件的meta-data -->
  <meta-data
    android:name="android.appwidget.provider"
    android:resource="@xml/appwidget_provider"
    />

</receiver>

时间: 2024-10-23 12:00:55

桌面小控件的实例-----数字时钟的相关文章

mac下dashboard小控件开发实例(附源码)

1.背景 用mac的用户都应该知道,mac有一个很好的功能,就是dashboard小控件的功能,按下F12键就可以自由切换.博主最近在背GRE单词,就尝试这开发了一个背单词的dashboard小控件.效果如图 2.步骤 (1)安转dashcode 这个是开发工具,用起来有点像xcode, 下载地址:https://developer.apple.com/downloads/index.action (2)打开dashcode,新建项目 打开右上角的资源库,可以随意拖拉控件在里面.然后右键需要添加

android中常用的小控件------Widgets的使用

好久没有写博客了,都不知博客怎么写了,最近突然想写博客,以帮助更多的人,却又不知道写什么好呢? 好吧  我承认我有点懒惰了,可是程序猿是不应该懒惰的哦,俺要做个好孩子. 好了言归正传,开始介绍下今天的主要内容吧! Widgets一个桌面的小控件    个人认为是很常用的,不知道大神们是不是这么觉得的呢?比如说你开发的一款音乐播放器的软件,可把基本的上一曲和下一曲.暂停的几个功能放在这个小控件里面将它显示在桌面上来,这样就很方便啦,你想要下一曲.上一曲.暂停播放的时候,就不用再打开播放器了,而是直

如何在Android实现桌面清理内存简单Widget小控件

如何在Android实现桌面清理内存简单Widget小控件 我们经常会看到类似于360.金山手机卫士一类的软件会带一个widget小控件,显示在桌面上,上面会显示现有内存大小,然后会带一个按键功能来一键清理内存,杀死后台进程的功能,那么这个功能是如何实现的呢,我们今天也来尝试做一个类似的功能的小控件. 效果图: 一.UI部分的编写: 参照Google的文档,首先在建立一个类继承AppWidgetProvider import android.appwidget.AppWidgetProvider

(转)深入理解最强桌面地图控件GMAP.NET --- 百度地图

GMAP.NET支持了Google, Bing, Ovi, Openstreetmap, Yahoo,GIS等多种地图,但国内的地图支持得比较少. 不过没有关系,我们可以为GMAP.NET添加百度地图的支持,只要了解了地图加载的原理,就很容易集成进来, 最重要的是,它是支持离线的,也就是说利用GMAP.NET,我们可以制作各种离线地图供我们桌面应用程序使用, 这也是我为什么称之为最强地图控件的原因. 如何在你的程序中使用GMAP.NET百度地图 整个代码已经提交到 http://ypmap.go

(转)深入理解最强桌面地图控件GMAP.NET --- 原理篇

前几篇介绍了一些国内地图的案例, 深入理解最强桌面地图控件GMAP.NET --- SOSO地图 深入理解最强桌面地图控件GMAP.NET --- 百度地图 我们以Google地图为例,这章介绍下地图加载的原理. 投影(Projection) 谷歌地图采用的是墨卡托投影法,这里转载(http://www.cnblogs.com/willwayer/archive/2010/06/11/1756446.html) 下墨卡托投影的定义:墨卡托(Mercator)投影,又名“等角正轴圆柱投影”,荷兰地

(转)深入理解最强桌面地图控件GMAP.NET ---高德地图

前一篇介绍了GMAP.NET的理论基础,这篇介绍如何集成高德地图.高德地图自从为IOS6提供地图后,目前已经被大众所熟知了. 在我集成国内地图的经验来看,也是最符合墨卡托投影法的. 前面的相关文章链接: 深入理解最强桌面地图控件GMAP.NET --- 原理篇 深入理解最强桌面地图控件GMAP.NET --- SOSO地图 深入理解最强桌面地图控件GMAP.NET --- 百度地图 深入理解最强桌面地图控件GMAP.NET --- 初用 深入理解最强桌面地图控件GMAP.NET --- 初识 如

(转)深入理解最强桌面地图控件GMAP.NET --- SOSO地图

前三篇介绍了GMAP.NET的一些基本功能以及如何集成一个百度地图. 深入理解最强桌面地图控件GMAP.NET --- 初识 深入理解最强桌面地图控件GMAP.NET --- 初用 深入理解最强桌面地图控件GMAP.NET --- 百度地图 虽然地图在国内用得最多的是谷歌和百度,但任何互联网产品都绕不过“腾讯”, 这一章就介绍如何在GMAP.NET中支持搜搜地图. 如何在你的程序中使用GMAP.NET SOSO地图 国内的地图都差不多,我觉得做得最好的是高德,下一篇会结合理论章节讲讲为什么,至少

(转)深入理解最强桌面地图控件GMAP.NET ---搜狗(sougou地图)

这应该是我集成国内地图的最后一篇了,以后如果有精力会继续分析Google地图,Bing地图,Yahoo地图,Ovi地图. 同时,会尽快将离线地图的使用以及数据存储部分分享出来. 前面的相关文章链接: 深入理解最强桌面地图控件GMAP.NET --- 原理篇 深入理解最强桌面地图控件GMAP.NET --- SOSO地图 深入理解最强桌面地图控件GMAP.NET --- 百度地图 深入理解最强桌面地图控件GMAP.NET --- 初用 深入理解最强桌面地图控件GMAP.NET --- 初识 如何在

等级显示小控件

等级控件效果图: 实现方式: 自定义小控件,通过frame来获取它的坐标,然后通过富文本的方式来实现不同文字,由于文字粗体和斜体要同时使用,所以通过富文本实现比较方便: 声明文件: 其中有两个方法,一个是初始化,一个是改变等级需要调用的方法: #import <UIKit/UIKit.h> @interface IDSLevelconView : UIImageView @property (nonatomic, strong) UILabel *levelabel; - (instancet