WEB开发网
开发学院手机开发Android 开发 关于android “shake shake 摇摆 摇摆”的实现与优... 阅读

关于android “shake shake 摇摆 摇摆”的实现与优化

 2010-09-29 01:32:00 来源:WEB开发网   
核心提示:我们知道,在用户摇摆手机的时候,关于android “shake shake 摇摆 摇摆”的实现与优化(2),不可能速度的最大值是你设定的临界值,一般情况是,这里需要用到activityForResult如:intent.setClass(HelloBear.this, ChooseBear.class);HelloB

我们知道,在用户摇摆手机的时候,不可能速度的最大值是你设定的临界值,一般情况是,在到达临界值之后,速度还会增长,如果不加以控制的话,这个动作可能会被连续的执行

在不加控制的情况下,我试验的结果是:我的intent基本平均要被执行3-5次……

如何解决这个问题呢?或许我的解决方案没有普适性,因为我并没有 完全基于在一个activity里面解决问题,但是可以供参考~因为我们要做的很多意图都是activity之间切换

在监听判断时 加入一个boolean 标志 ,常态下为true ,在打开(动作发生)后,置为flase,在(动作打开)的activity被销毁后,再置为true,这里需要用到activityForResult

如:intent.setClass(HelloBear.this, ChooseBear.class);

HelloBear.this.startActivityForResult(intent, 0);

然后在onActivityResult中置标志为常态

问题得以解决

最后,贴一下,实现shake的核心代码~基本和javaeye上的一样,只是进行了上述优化(这个算法本身很简单很直观但是很SB~我希望找到更强大的算法)

public void onSensorChanged(int sensor,float[] values)

{

if (sensor == SensorManager.SENSOR_ACCELEROMETER) {

long curTime = System.currentTimeMillis();

// 每10毫秒检测一次

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&& shakable ==true )

{

Intent intent = new Intent();

intent.setClass(HelloBear.this, ChooseBear.class);

HelloBear.this.startActivityForResult(intent, 0);

shakable = false;

cancelDelayHide();

}

last_x = x;

last_y = y;

last_z = z;

}

}

}

上一页  1 2 

Tags:关于 android shake

编辑录入:coldstar [复制链接] [打 印]
赞助商链接