图呢,,,,,自己想想吧、、、、、、、画面很美。
package com.example.propertyanimsecdemo;
import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.provider.ContactsContract.CommonDataKinds.Event;
import android.sax.StartElementListener;
import android.util.Log;
import android.widget.TextView;
public class SensorManagerHelper implements SensorEventListener {
/**
* 上下文
*/
private Context mContext;
/**
* 传感器管理器
*/
private SensorManager mSensorManager;
/**
* 传感器
*/
private Sensor mSensor;
/**
* 手机上一个位置时重力感应坐标
*/
private float LX, LY, LZ;
/**
* 晃动监听
*/
private OnShakeListener mShakeListener;
/**
* 速度阈值,当摇晃速度达到这值后产生作用
*/
private static final int SPEED_SHRESHOLD = 5000;
/**
* 两次检测的时间间隔
*/
private static final int UPTATE_INTERVAL_TIME = 50;
/**
* 某轴上的速度s/t
*/
private static final int SPEED_XYZ = 500;
/**
* 上次晃动检测时间
*/
private long lastShakeTime;
public SensorManagerHelper(Context mContext) {
super();
this.mContext = mContext;
start();
}
public void start() {
// 获取传感器管理器
mSensorManager = (SensorManager) mContext.getSystemService(Context.SENSOR_SERVICE);
if (mSensorManager != null) {
// 获取重力传感器
mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
}
if (mSensor != null) {
// 注册listener,第三个参数是检测的精确度
// SENSOR_DELAY_FASTEST 最灵敏 因为太快了没必要使用
// SENSOR_DELAY_GAME 游戏开发中使用
// SENSOR_DELAY_NORMAL 正常速度
// SENSOR_DELAY_UI 最慢的速度
mSensorManager.registerListener(this, mSensor, SensorManager.SENSOR_DELAY_UI);
}
}
public void stop() {
mSensorManager.unregisterListener(this);
}
@Override
public void onSensorChanged(SensorEvent event) {
long curShakeTime = System.currentTimeMillis();// 当前时间
long deltaT = curShakeTime - lastShakeTime;// 两次时间差
if (deltaT < UPTATE_INTERVAL_TIME) {
return;
}
lastShakeTime = curShakeTime;
// 获取当前x,y,z坐标
float CX = event.values[0];
float CY = event.values[1];
float CZ = event.values[2];
// 坐标差
float deltaX = CX - LX;
float deltaY = CY - LY;
float deltaZ = CZ - LZ;
LX = CX;
LY = CY;
LZ = CZ;
double speed = Math.sqrt(deltaX * deltaX + deltaY * deltaY + deltaZ * deltaZ) / deltaT * 10000;
// 达到速度阀值,发出提示
if (speed >= SPEED_SHRESHOLD)
mShakeListener.onShake();
if ((7<Math.abs(CX)&&Math.abs(CX)<10&&Math.abs(deltaX/deltaT*10000)>SPEED_XYZ)||(7<Math.abs(CY)&&Math.abs(CY)<10&&Math.abs(deltaY/deltaT*10000)>SPEED_XYZ)||(7<Math.abs(CZ)&&Math.abs(CZ)<10&&Math.abs(deltaZ/deltaT*10000)>SPEED_XYZ)) {
mShakeListener.onSensor();
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
// 摇晃监听接口
public interface OnShakeListener {
/**
* 晃动监听回调
*/
public void onShake();
/**
* 重力监听回调
*/
public void onSensor();
}
/**
* 设置晃动监听
*
* @param mShakeListener
*/
public void setmShakeListener(OnShakeListener mShakeListe