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

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

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个动画效果。此处可以加振动+加音效实现更好的用户体验。


你可能感兴趣的:(android,摇一摇,仿微信)