android wear开发之绘制表盘

当你配置完工程并且添加了实现表盘service的类后,你可以开始初始化并绘制表盘。Android SDK中包含表盘示例,示例位置在android-sdk/samples/android-21/wearable/WatchFace目录下。service很多方面的实现描述都在这里面,例如初始化和检测设备功能,可以应用于任何表盘,所以你可以在你的表盘中复用这些代码。

当系统加载你的service,你应该分配和初始化大部分表盘所需的资源,包括加载bitmap资源,创建定时器对象来运行自定义动画,配置paint对象和风格,以及执行其他计算。你可以只执行一次这些操作并且复用他们的执行结果。这样可以提高表盘的性能。

初始化表盘有以下几步:

声明自定义定时器变量,图像对象和其他元素。

在Engine.onCreate()方法中初始化表盘元素。

在Engine.onVisibilityChanged()方法中初始化自定义的定时器。

初始化变量

当系统加载你的service的时候,会在不同的实现地方访问你所初始化的资源,所以你可以复用它们。你可以在你的WatchFaceService.Engine实现中声明这些资源变量。

为下面这些元素声明变量:

图像对象

大部分表盘至少包含一个bitmap图片作为表盘背景图,你可以使用其他bitmap图片来呈现时钟指针或其他表盘设计元素。

定时器

当时间改变的时候系统每分钟通知一次表盘,但一些表盘会在自定义的时间间隔下显示动画。在这些案例中,你需要提供一个自定义的定时器来频繁刷新你的表盘。

时区变化receiver

当用户在旅行途中他们可以自适应时区,系统会发送事件广播。你的service必须注册一个广播的receiver,当时区发生改变和更新的时候会受到通知。

在表盘代码示例中的AnalogWatchFaceService.Engine类简单的定义了这些变量。自定义定时器实现了一个handler实例,使用线程消息队列来发送和处理延迟消息。在这个表盘示例中,自定义的定时器每秒触发一次。当定时器触发的时候,handler会调用invalid()方法,并且系统之后会调用ondraw()方法来重绘表盘。

private class Engine extends CanvasWatchFaceService.Engine {

static final int MSG_UPDATE_TIME = 0;

/* a time object */

Time mTime;

/* device features */

boolean mLowBitAmbient;

/* graphic objects */

Bitmap mBackgroundBitmap;

Bitmap mBackgroundScaledBitmap;

Paint mHourPaint;

Paint mMinutePaint;

...

/* handler to update the time once a second in interactive mode */

final Handler mUpdateTimeHandler = new Handler() {

@Override

public void handleMessage(Message message) {

switch (message.what) {

case MSG_UPDATE_TIME:

invalidate();

if (shouldTimerBeRunning()) {

long timeMs = System.currentTimeMillis();

long delayMs = INTERACTIVE_UPDATE_RATE_MS

- (timeMs % INTERACTIVE_UPDATE_RATE_MS);

mUpdateTimeHandler

.sendEmptyMessageDelayed(MSG_UPDATE_TIME, delayMs);

}

break;

}

}

};

/* receiver to update the time zone */

final BroadcastReceiver mTimeZoneReceiver = new BroadcastReceiver() {

@Override

public void onReceive(Context context, Intent intent) {

mTime.clear(intent.getStringExtra("time-zone"));

mTime.setToNow();

}

};

/* service methods (see other sections) */

android wear 制作时钟界面,android wear开发之绘制表盘.doc相关推荐

  1. Android Studio 制作微信界面 下

    主界面 上一篇文章的链接: Android Studio 制作微信界面 上_nazonomaster的博客-CSDN博客https://blog.csdn.net/nazonomaster/artic ...

  2. Android Studio 制作微信界面 上

    工程功能介绍 打开app,首先是个闪屏界面(常见于一般打开app时的小广告),设置时间为2s后进入登录界面.在登录界面中,中间可以输入密码,点击登录按钮进入微信的界面.   微信的界面由4个fragm ...

  3. Android多功能时钟源代码,Android多功能时钟开发案例(实战篇)

    上一篇为大家介绍的是Android多功能时钟开发基础内容,大家可以回顾一下,Android多功能时钟开发案例(基础篇) 接下来进入实战,快点来学习吧. 一.时钟 在布局文件中我们看到,界面上只有一个T ...

  4. android仿酷狗界面,Android仿酷狗动感歌词(支持翻译和音译歌词)显示效果

    简介 该开源依赖库是乐乐音乐播放器里的一个歌词模块功能,现在把该功能模块独立出来进行优化,并弄成了一个开源依赖库,其它音乐播放器项目只要引用该库并调用接口,便可轻松实现与乐乐音乐播放器一样的动感歌词显 ...

  5. android里qq登录界面,Android仿QQ登陆窗口实现原理

    今天根据腾讯qq,我们做一个练习,来学习如何制作一个漂亮的布局.首先看一下官方图片 还是一个启动画面,之后进入登录页面,导航页面就不介绍了,大家可以参考微信的导航页面.首先程序进入SplashActi ...

  6. android studio制作目录布局,Android Studio:新创建的目录未出现在文件夹Vi中

    9个解决方案 136 votes 事实证明,顶部有一个选择器,默认设置为显示Android. 如果您将切换按钮向下拨到"包",您可以看到自己的包. Aggressor answer ...

  7. android logo制作教程视频,android開机logo制作详细步骤.docx

    android開机logo制作详细步骤 Android 开机画面制作详解:(andorid 学习网站:)android 开机画面共有3个部分:一:linux kernel 的开机画面(/kernel/ ...

  8. android记账本登录界面,Android记账本开发(一):整体UI界面布局

    今天开始进行记账本的开发. 主要想法表述: 1.与用户界面交互的主要有三个界面,总资金管理,收入界面管理,支出管理. 2.实现登录注册功能,在数据库中不同用户有着不同的数据记录. 其他细节在具体开发中 ...

  9. android 程序必须有界面,Android开发之开机启动没有界面的应用程序

    在Android系统中,有界面的app一定是有Activity的,没有界面的app,那就是一个Service了. Service如何启动呢?办法和Activity的启动一样,也是Intent对象.我讲 ...

  10. android模仿快手作品界面,android开发:使用DrawerLayout仿快手侧滑菜单栏

    先看对比一下我们写的效果和别人的效果: activity的xml布局: 1.根部局是DrawerLayout布局,必须设置openDrawer属性: tools:openDrawer="st ...

最新文章

  1. 【每日一念经】四轮面试,我如何拿到美团的offer?
  2. windows adb shell 乱码
  3. python编辑时怎样换行_python怎么换行输入
  4. ASP.NET MVC增删改查
  5. 嵌入式linux tftp rpm,嵌入式linux的tftp配置
  6. mysql 8函数索引_新特性解读 | MySQL 8.0 索引特性1-函数索引
  7. (并查集)The Suspects
  8. 在Node.js中操作文件系统(一)
  9. C语言串 typedef char String[MaxLength + 1]
  10. 017、Linux下超实用的性能监测工具
  11. python读取、保存npy文件
  12. Windows 使用技巧之WinZIP密码破解
  13. ios textView输入框光标问题
  14. 3种CSS3实现的网页过度效果代码,可独立用于网页设计展示
  15. 漫步在云台山茶园穿越,感受来自李亮先生的美意
  16. 【趣味】智能AI祝福语
  17. 1药网发布Q4财报:仍处于持续亏损状态,还要推动子公司上市
  18. 如何学习一门编程语言,从入门到不放弃!
  19. 图像加密 关于二维Arnold变换,广义Arnold变换和更一般形式变换的练习(Matlab实现)
  20. 双面打印无效选择了文件服务器,使用高级选项打印(纸盘选择,双面打印,装订)...

热门文章

  1. 码流 / 码率 / 比特率 / 帧速率 / 分辨率 / 高清的区别
  2. MES生产管理系统中,看板管理究竟是什么
  3. docker-compose 安装常用服务
  4. ubuntu18.04安装dash-to-dock出错的问题
  5. “拼多多”被薅的问题出在哪儿?损失将如何买单?
  6. 远程监控有效保护家庭安全
  7. vue—递归组件(vue组件name的作用之一)
  8. Android获取手机Cpu温度
  9. oracle彻底删除dbf文件,ORACLE 删除数据文件模拟灾难恢复
  10. 网络创业:网站盈利模式分析分类