android开发桌面控件之液晶时钟

第一步:新建一个led_clock.xml文件,用来写时钟的布局,我们用6个ImageView存放时钟的时、分、秒的数字图像,代码和效果如下:




    
    
    

    
    
    

    
    

运行效果:

第二步:编写类LedClock,该类继承AppWidgrtManager,  代码如下:

public class LedClock extends AppWidgetProvider{
    private Timer timer;
    private AppWidgetManager appWidgetManager;
    private Context context;
    //  存放时钟的数字图像数组
    private int digits[] =
            {
                    R.drawable.time0,
                    R.drawable.time1,
                    R.drawable.time2,
                    R.drawable.time3,
                    R.drawable.time4,
                    R.drawable.time5,
                    R.drawable.time6,
                    R.drawable.time7,
                    R.drawable.time8,
                    R.drawable.time9
            };
    //   存放显示数字图像的ImageView数组
    private int digitViews[] =
            {
                    R.id.img0,
                    R.id.img1,
                    R.id.img2,
                    R.id.img3,
                    R.id.img4,
                    R.id.img5
            };
    @Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
        super.onUpdate(context, appWidgetManager, appWidgetIds);
        //  创建一个定时器
        timer = new Timer();
        this.context = context;
        this.appWidgetManager = appWidgetManager;
        //  定时器每隔一秒发送一个空信息,用来更新控件上的消息
        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对象,加载时钟的布局界面
                RemoteViews remoteView = new RemoteViews(context.getPackageName(),R.layout.led_clock);
                SimpleDateFormat sdf = new SimpleDateFormat("hhmmss");
                String timeStr = sdf.format(new Date());
                for(int i = 0;i < timeStr.length(); i++){
                    //  将数字字符减去48就能得到对应的数字
                    int num = timeStr.charAt(i) - 48;
                    //  对获取到的时钟布局界面的不同ImageView设置随时间变化的数字图像
                    remoteView.setImageViewResource(digitViews[i],digits[num]);
                    ComponentName componentName = new ComponentName(context,LedClock.class);
                    //  更新桌面控件
                    appWidgetManager.updateAppWidget(componentName,remoteView);
                }
            }
            super.handleMessage(msg);
        }
    };
}
第三步:由于AppWidgetProvider继承了BroadcastReceiver,故在AndroidManifest.xml文件中配置receiver,代码如下:

        
            
                
            
            @xml/my_clock"/>
        
在res文件夹下新建xml文件夹,在该xml文件夹下建立my_clock.xml文件 , my_clock文件中定义的是对桌面控件的配置信息,代码如下:


第四步:启动程序后,在模拟器中找到WIDGET进入桌面控件列表,长按我们写好的桌面控件即可添加到桌面显示

注:使用SimpleDateFormat sdf = new SimpleDateFormat("hhmmss")是以十二小时制获得时间,想要获得二十四小时制的时间显示则将“hhmmss”换成“”HHmmss”



你可能感兴趣的:(android案例)