根据以上的简单分析, 我们就知道该怎么做了, Just now
布局没啥可说的, 大家直接看代码吧
step1: 在onStart() 方法中获取传感器的SensorManager
step2: 紧接着我们就要在Pause中注销传感器
Note: 至于为什么我们要在onStart和onPause中执行SensorManager的注册和注销, 就是因为, 防止在界面退出(包括按Home键)时, 摇一摇依旧生效(代码中有注释)
step3: 在step1中的注册监听事件方法中, 我们传入了当前Activity对象, 故让其实现回调接口, 得到以下方法
Note: 当用户晃动手机会调用onSensorChanged方法, 可以做一些相应的操作
为解决动画和震动延迟, 我们开启了一个子线程来实现.
子线程中会通过发送Handler消息, 先开始动画效果, 并伴随震动和声音
先把Handler的实现放一放, 我们再来看一下震动和声音的实现
step 1: 先获取到震动相关的服务,注意要加权限. 至于音效, 我们采用SoundPool来播放, 在这里非常感谢Vincent 的贴子. 好, 初始化SoundPool
震动权限
Note: 大家可能发现SoundPool的构造方法已经过时, 不过不用担心这是Api21之后过时的, 所以也不算太"过时"吧
step2: 接下来我们就要介绍Handler中的实现了, 为避免Activity内存泄漏, 采用了软引用方式
Note: 内容不多说了, 代码注释中很详细, 还有一个startAnimation方法
我先来说一下它的参数, true表示布局中两张图片从打开到关闭的动画, 反之, false是从关闭到打开状态, 上代码
step3: startAnimaion方法上的实现
至此 核心代码已经介绍完毕 , 但是还有部分小细节不得不提一下
- 大家要在初始化View之前将上下两条横线GONE掉, 用GONE是不占位的
2.咱们的摇一摇最好是只竖屏 (毕竟我也没见过横屏的摇一摇), 加上下面代码