文档章节

开源中国 OsChina Android 客户端源码分析(5)摇一摇

姬鑫
 姬鑫
发布于 2015/05/29 16:53
字数 655
阅读 311
收藏 1

和微信摇一摇的功能类似,开源中国客户端也使用了摇一摇的功能,本节我们分析下它的实现:

1布局文件:fragment_shake.xml 默认手握手机的图片,隐藏了底部进度条和项目相关信息的 布局文件(此处用

include 加载了布局文件)

2类文件:ShakeFragment:

2.1摇一摇功能的实现,用到了传感器Sensor中的加速度传感器,而传感器的获取可以通过传感器服务来获取,代码详见initData()函数;在使用传感器的过程中,要注意:当不在使用传感器,特别是在界面处于Pause状态时,应该让传感器不可用。这就是为什么源码中在onResume中注册传感器,在onPause中取消掉注册的监听器,如果在界面暂停状态下,不取消掉注册,那么是相对比较耗电的。

2.2实现SensorEventListener接口,有两个方法精度发生变化和值发生变化。当摇一摇时,传感器关联的坐标系统中的值就会发生变化,因此将实现摇一摇效果的触发放在值发生变化的函数中。

2.3什么时候触发?两个条件一个是传感器值变化前后的时间差是否满足时间阈值;另外一个,摇动力气的阈值;源码中用速度和力气挂钩,我实在理解不透,因为根据API解释,加速度传感器XYZ轴的值代表的意思是加速度。因此源码中Math.sqrt(deltaX * deltaX + deltaY * deltaY + deltaZ * deltaZ)我理解为,在这段时间差内,空间加速度的变化,然后在除以时间,表示单位时间内加速度的变化情况,至于*100只是为了对数据进行了处理,和你设置的力气的阈值有关系。而根据牛顿定理,F=MA,A就是加速度,加速度越大,那么在质量不变的情况下,作用力F就越大,而这也符合加速度传感器的定义,能够反应出“作用在设备上的力气”。因此觉得 那个speed定义不妥。满足阈值时触发摇动事件;

2.4而摇动的效果实际上是一个动画集合(可追踪代码),左右移动的4个动画效果。此处可以加振动+加音效实现更好的用户体验。


© 著作权归作者所有

姬鑫
粉丝 85
博文 54
码字总数 16632
作品 0
宁波
程序员
私信 提问
基于Google Flutter的开源中国客户端,支持Android与iOS

FlutterOSC 基于Google Flutter的开源中国客户端,支持Android和iOS。 码云戳这里 GitHub戳这里 关于Google Flutter Android扫码下载APK 请使用手机浏览器扫码下载,不要使用微信或者qq扫码 ...

我遇见谁_会有怎样的对白
2018/05/09
0
0
开发行业门户APP,[在开源中国IOS 版APP 基础上二次开发]

[背景] 开源中国的APP 客户端 非常适合 行业新闻门户 需要。 我方已经将安卓版迁移到我方后台,需要继续将IOS 迁移过来。 [需求] 用户注册登录,加绑定手机 免费信息,修改新闻列表和信息显示...

快乐闪光灯
2016/03/31
4
0
【开源已“九”,等你来摇】996 “开源已九”集字赢大奖

什么???996!!! 别怕,开源中国九周年我们要来一个爽翻天的996! 不用加班,不用写代码,不用面对产品经理…… 只需要拿起手机摇!摇!摇! 只要您是开源中国注册用户,在8月31日-9月5...

两味真火
2017/08/31
2.5K
41
OSChina 安卓客户端 2.0 正式版更新发布

前天我们发布了 OSChina 的 Android 客户端全新改版的 2.0 预发布版本,广受好评也发现一些比较普遍的问题。经过昨天的修复和完善,今天终于迎来了全新的改版 —— 2.0 正式版! 你可以通过下...

oschina
2014/12/26
14.7K
86
1024 尽情“摇”摆,High 翻全场等你来

程序员创造了世界,世界欠程序员一个1024>>> 在 1024 这个重要的日子,祝 OSCer 们节日快乐!在今天最最最重要的 10:24 以及约上了对象(“对象”)的 18:24,开源中国都善解人意地为你们准备...

达尔文
2016/10/21
19K
180

没有更多内容

加载失败,请刷新页面

加载更多

Angular 英雄编辑器

应用程序现在有了基本的标题。 接下来你要创建一个新的组件来显示英雄信息并且把这个组件放到应用程序的外壳里去。 创建英雄组件 使用 Angular CLI 创建一个名为 heroes 的新组件。 ng gener...

honeymoose
今天
4
0
Kernel DMA

为什么会有DMA(直接内存访问)?我们知道通常情况下,内存数据跟外设之间的通信是通过cpu来传递的。cpu运行io指令将数据从内存拷贝到外设的io端口,或者从外设的io端口拷贝到内存。由于外设...

yepanl
今天
6
0
hive

一、hive的定义: Hive是一个SQL解析引擎,将SQL语句转译成MR Job,然后再在Hadoop平台上运行,达到快速开发的目的 Hive中的表是纯逻辑表,就只是表的定义,即表的元数据。本质就是Hadoop的目...

霉男纸
今天
3
0
二、Spring Cloud—Eureka(Greenwich.SR1)

注:本系列文章所用工具及版本如下:开发工具(IDEA 2018.3.5),Spring Boot(2.1.3.RELEASE),Spring Cloud(Greenwich.SR1),Maven(3.6.0),JDK(1.8) Eureka: Eureka是Netflix开发...

倪伟伟
昨天
13
0
eclipse常用插件

amaterasUML https://takezoe.github.io/amateras-update-site/ https://github.com/takezoe/amateras-modeler modelGoon https://www.cnblogs.com/aademeng/articles/6890266.html......

大头鬼_yc
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部