Profile image
浏览次数

现在:
最近一小时:
最近24小时:
浏览总量:
创建高性能的表盘主题
Monday, May 11, 2015 22:27
% of readers think this story is Fact. Add your two cents.
0


原作者,林海泉, Android Wear

翻译,陈庆滔,杨智行,林海泉,胡坤

各位Android Wear的开发者,如果你刚刚创作了一个非常棒的表盘设计,你一定很希望将你设计的最好的一面展示给世界欣赏。让你的用户知道这不仅是一个非常好的设计而且是一个用了不少心思创作的艺术作品。

表盘运行时的核心函数为onDraw,它是用来执行绘制操作的。onDraw其实是非常灵活的,但同时却很容易带来很多性能问题。

在这里,我们主要讨论一些性能优化的问题,并且剖析一个实际的案例圣诞老人表盘做详细解释。我们最后不仅可以将圣诞老人表盘的帧率从18fps提高到42fps,而且也可以令动画拥有在亚像素级别(sub-pixel)让动画更加的平滑。

性能优化的起点- 18 fps

为了实现最终的界面效果,我们的圣诞老人表盘主题包含一些互相叠加的位图。从下到上,主要包含以下这些图片:

  1. 1. 静态背景图片
  • 2. 动态的云彩图片,从边缘到中间移动
  • 3. 静态小时标记表针图片
  • 4. 静态的圣诞老人和雪橇
  • 5. 圣诞老人的手臂,用来指示小时和分钟
  • 6. 静态的圣诞老人头像

优化就从这些图片开始…

压缩大图像
(+14 fps)

图像的大小对于可穿戴应用动画的动画的性能至关重要。尤其是如果我们需要对那些图像进行加工,举例来说还要被用来图像缩放和旋转。

合并图像 (+7 fps)
虽然最理想的设计情况是这些移动运动的云层从小时标记表盘指针的下面飘过,但是既然云层本身也是透明的,小时标记在云层的上面还是下面,看起来实际上从视觉上没有大太多的差别,因为云层本身也是透明的。因此,为了性能考虑,我们可以把背景图片和表针合并成一张图片。

在onDraw,删除一些性能消耗大的函数 (+3
fps)

onDraw属于表盘主题最核心的函数功能。每一次帧的绘制,都会被调用一次,在绘制下一帧之前,实际的绘制流程必须需要等待上一帧的OnDraw函数执行完毕后才会进行。

反据齿此 vs 和过滤位图参数 标识 – 怎么用才能获得另外的比较两帧
(+2 fps)

因为Android
Wear有各种各样的形状和大小。从而导致在绘制到屏幕上之前,所以开发者有时候必须重新调整位图的大小才绘制到屏幕上。

亚像素(sub-pixel)级别的平滑
算到这里,我们目前应该已经可以提升到44fps,但是为什么结果是42fps呢?这个损失的原因是由canvas.drawBitmap的限制造成的。

点亮每个手腕

表盘是Android
Wear最突出的UI元素。作为一个优良工匠,我们的责任就是使其大放异彩。让我们点亮每个手腕吧!

更详细的技术实现,请点击这里阅读原文。

     

2015-05-11 22:26:04

原始网页: http://blog.sina.com.cn/s/blog_9c079b040102vr6e.html

Report abuse

评论

您的评论
Question   Razz  Sad   Evil  Exclaim  Smile  Redface  Biggrin  Surprised  Eek   Confused   Cool  LOL   Mad   Twisted  Rolleyes   Wink  Idea  Arrow  Neutral  Cry   Mr. Green

今日头条
最新故事

Register

Newsletter

Email this story
Share This Story:
Print this story
Email this story
Digg
Reddit
StumbleUpon
Share on Tumblr
GET ALERTS:

If you really want to ban this commenter, please write down the reason:

If you really want to disable all recommended stories, click on OK button. After that, you will be redirect to your options page.