注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

等待机遇

这个世界上没有人知道自己到底想要什么,就等着别人来告诉他们。

 
 
 

日志

 
 
关于我

>>>>>>>>>>Apple Watch开发交流群: 313347946 >>>>>>>>>>Android Wear开发交流群:318275279 >>>>>>>>>>>>>智能手表开发者服务平台: http://www.openwatch.cn

网易考拉推荐

智能手表开发之OpenWatch SDK使用(4)创建自定义表盘  

2015-11-04 22:43:17|  分类: Android Wear |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
智能手表开发者服务平台:http://www.openwatch.cn

OpenWatch提供自定义View或者布局文件的方式创建表盘,并提供时间变化与时区变化回调等(详见SDK Demo)。


    public class DigitalWatchFace extends OpenWatchFace {
    
        private TextView timeTextView, dateTextView;
    
        // 构建表盘布局时回调
        @Override
        public View onCreateView() {
            // TODO Auto-generated method stub

            //设置表盘样式 指针样式等 此处略
            ......
    
            View watchface = View.inflate(this, R.layout.digital_watchface_layout, null);
            timeTextView = (TextView) watchface.findViewById(R.id.watchface_time_tv);
            dateTextView = (TextView) watchface.findViewById(R.id.watchface_date_tv);
    
            // 返回自定义view或者布局文件生成的view
            return watchface;
        }


        // 时区发生改变时回调
        @Override
        public void onTimeZoneChanged() {
            // TODO Auto-generated method stub
            super.onTimeZoneChanged();
        }

        // 时间发生改变时回调
        @Override
        public void onTimeUpdate(Time time) {
            // TODO Auto-generated method stub
            super.onTimeUpdate(time);

            // 刷新表盘
            invalidate();
        }

    
    }


改变表盘上的日期和时间显示

        @Override
        protected void onWatchFaceDraw(Canvas canvas, Rect bounds) {
            // TODO Auto-generated method stub
    
            Time time = getTime();
            setDate(time);
            setTime(time);
    
            super.onWatchFaceDraw(canvas, bounds);
        }
    
        private void setDate(Time time) {
            String dateStr = (time.month + 1) + "." + time.monthDay + "  " + (time.hour > 12 ? "下午" : "上午");
            dateTextView.setText(dateStr);
        }
    
        private void setTime(Time time) {
            String minStr = time.minute < 10 ? "0" + time.minute : String.valueOf(time.minute);
            String timeStr = (time.hour > 12 ? time.hour - 12 : time.hour) + ":" + minStr;
    
            timeTextView.setText(timeStr);
        }

可设置秒针及相关样式,可设置长宽、纯色指针、图片指针等。

    @Override
    public View onCreateView() {
        // TODO Auto-generated method stub

        OpenWatchFaceStyle style = new OpenWatchFaceStyle(this);

        // 如果需要的话 构建表盘秒针 否则不会绘制秒针
        OpenWatchFaceHand secondHand = new OpenWatchFaceHand();
        secondHand.setLength(DisplayUtil.dip2px(this, 10));
        secondHand.setWidth(DisplayUtil.dip2px(this, 3));
        // 秒针在表盘边界显示
        secondHand.setDrawGravity(OpenWatchFaceHand.DRAW_GRAVITY_BORDER);

        style.setSecondHand(secondHand);

        setStyle(style);

        //设置表盘样式 创建布局等 此处略
        ......
    }

可设置onTimeUpdate函数的回调频率模式

    //这里设置的模式 表现为交互模式下每秒回调一次 省电模式下每分钟回调一次
    setTimeUpdateMode(TIME_UPDATE_PER_SECOND_MODE);

可设置表盘样式

    @Override
    public View onCreateView() {
        // TODO Auto-generated method stub

        OpenWatchFaceStyle style = new OpenWatchFaceStyle(this);

        // 构建秒针及设置秒针样式等 此处略
        ......

        // 表盘上的通知卡片以单行高度显示
        style.setCardPeekMode(OpenWatchFaceStyle.PEEK_MODE_SHORT);

        setStyle(style);

        //创建布局等 此处略
        ......
    }

声明权限

    <uses-permission android:name="com.google.android.permission.PROVIDE_BACKGROUND" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />

在工程中创建res/xml目录,并创建watch_face.xml文件,文件内容为

    <?xml version="1.0" encoding="utf-8"?>
    <wallpaper xmlns:android="http://schemas.android.com/apk/res/android" />

注册表盘Service,注意要替换name为自定义类,其中label属性为表盘名称。

    <service
    android:name="cn.openwatch.wearable.demo.DigitalWatchFace"
    android:allowEmbedded="true"
    android:label="@string/digital_watch_face_name"
    android:permission="android.permission.BIND_WALLPAPER" >
    <intent-filter>
    <action android:name="android.service.wallpaper.WallpaperService" />
    
    <category android:name="com.google.android.wearable.watchface.category.WATCH_FACE" />
    </intent-filter>
    
    <meta-data
    android:name="android.service.wallpaper"
    android:resource="@xml/watch_face" />
    
    <!-- 表盘预览图 自行替换android:resource 对于圆形设备 预览图会被裁剪成圆形 -->
    <meta-data
    android:name="com.google.android.wearable.watchface.preview"
    android:resource="@drawable/ic_launcher" />
    </service>

若应用想构建多个表盘 则可以自定义多个OpenWatchFace子类,并分别注册多个表盘Service。
  评论这张
 
阅读(226)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017