该帖已经被评为良好帖
|
|
---|---|
作者 | 正文 |
发表时间:2009-04-18
如何检测shake动作其实有好多种approach, 一个是ClingMarks写的一个博客提到过. 基本上就是把x,y,z三个 轴上的距离变化统统加起来, 然后除以间隔的时间, 得出一个速度, 然后如果这个速度是大于某一个值的话, 就是shake动作了. 我个人认为这个公式有偏差, 在某些情况下一些非shake的动作也会被检测成shake. 而且你并不知道是在哪个方向产生了这个shake动作. 所以我叫这种模式coarse-grain, 很粗糙. 但如果你并不关心shake的一些具体细节, 只是想知道是不是shake动作而已, 这个应该已经足够了. 在你的Activity里, 你要implement这个SensorListener: public class ShakeActivity extends Activity implements SensorListener 然后你需要获取一个SensorManager: sensorMgr = (SensorManager) getSystemService(SENSOR_SERVICE); 然后注册自己这个感应器需要所获得的数据的flags: ensorMgr.registerListener(this,SensorManager.SENSOR_ACCELEROMETER,SensorManager.SENSOR_DELAY_GAME); 在你的onSensorChange()方法中, 你有这个粗糙公式来确定shake动作: public void onSensorChanged(int sensor, float[] values) { if (sensor == SensorManager.SENSOR_ACCELEROMETER) { long curTime = System.currentTimeMillis(); // 每100毫秒检测一次 if ((curTime - lastUpdate) > 100) { long diffTime = (curTime - lastUpdate); lastUpdate = curTime; x = values[SensorManager.DATA_X]; y = values[SensorManager.DATA_Y]; z = values[SensorManager.DATA_Z]; float speed = Math.abs(x+y+z - last_x - last_y - last_z) / diffTime * 10000; if (speed > SHAKE_THRESHOLD) { Log.d(”sensor”, “shake detected w/ speed: ” + speed); Toast.makeText(this, “shake detected w/ speed: ” + speed, Toast.LENGTH_SHORT).show(); } last_x = x; last_y = y; last_z = z; } } } 这个shake的速度临界点值定义为: private static final int SHAKE_THRESHOLD = 800; 这个实现其实是很简单的. 在我的下篇帖子中我会介绍比较细腻的检测方法, 也是我在iPhone开发中学到的一些心得. 本帖例子源码在附件里. 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-04-21
最后修改:2009-04-21
这个功能不错。可以拿着....来控制电脑鼠标,比如双击,就猛甩两次....,用...来控制鼠标轨迹就不在话下了。
|
|
返回顶楼 | |
发表时间:2009-06-08
楼主,我很想知道
SensorManager.DATA_X SensorManager.DATA_Y SensorManager.DATA_Z 这个怎么看X, Y, Z的。 屏幕的宽是X? 长是Y? 垂直是Z? 而且貌似SDK1.5里,模拟器执行 (SensorManager)getSystemService(Context.SENSOR_SERVICE); 就会死。。 |
|
返回顶楼 | |
发表时间:2009-09-09
part 2呢?
还没出么?还是我没找到? thanks 现在正在为这个精确控制苦恼 |
|
返回顶楼 | |
发表时间:2009-09-10
Hawy 写道 part 2呢?
还没出么?还是我没找到? thanks 现在正在为这个精确控制苦恼 由于帖子未到达预期的良好/精华贴目标... part 2暂时搁置了... -_____- |
|
返回顶楼 | |
发表时间:2009-09-10
lordhong 写道 Hawy 写道 part 2呢?
还没出么?还是我没找到? thanks 现在正在为这个精确控制苦恼 由于帖子未到达预期的良好/精华贴目标... part 2暂时搁置了... -_____- hong兄真是个人才 |
|
返回顶楼 | |
发表时间:2009-09-10
掌声不够,请大家热烈鼓掌。。。
|
|
返回顶楼 | |
发表时间:2009-09-10
我发现,手势这个东西真的是个很吸引人的地方。
|
|
返回顶楼 | |
发表时间:2009-09-10
lordhong 写道 Hawy 写道 part 2呢?
还没出么?还是我没找到? thanks 现在正在为这个精确控制苦恼 由于帖子未到达预期的良好/精华贴目标... part 2暂时搁置了... -_____- 看来需要大家一起顶起来............ |
|
返回顶楼 | |
发表时间:2009-10-13
hong老大,继续吧。
|
|
返回顶楼 | |