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


    为了实现一个数字时钟的桌面组件,开发者需要在程序界面上定义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>

  • 相关阅读:
    Kubernetes 再深入一点点
    10分钟完成 mongodb replSet 部署
    网络篇
    p2p 打洞专场(转)
    Dockerfile 编写
    关于github 代码管理,协作开发
    Kubernetes 基于 ubuntu18.04 手工部署 (k8s)
    备忘 ubuntu ip 及 dns 的坑
    各种语言web性能简单对比测试
    vue 按需加载
  • 原文地址:https://www.cnblogs.com/jiww/p/5649346.html
Copyright © 2020-2023  润新知