手机摇摇代码
来源:互联网 发布:国际跳棋软件 编辑:程序博客网 时间:2024/04/28 04:00
核心接口代码:
- import android.content.Context;
- import android.hardware.Sensor;
- import android.hardware.SensorEvent;
- import android.hardware.SensorEventListener;
- import android.hardware.SensorManager;
- public class ShakeListener implements SensorEventListener {
- String TAG = "ShakeListener";
- // 速度阈值,当摇晃速度达到这值后产生作用
- private static final int SPEED_SHRESHOLD = 3000;
- // 两次检测的时间间隔
- private static final int UPTATE_INTERVAL_TIME = 70;
- // 传感器管理器
- private SensorManager sensorManager;
- // 传感器
- private Sensor sensor;
- // 重力感应监听器
- private OnShakeListener onShakeListener;
- // 上下文
- private Context mContext;
- // 手机上一个位置时重力感应坐标
- private float lastX;
- private float lastY;
- private float lastZ;
- // 上次检测时间
- private long lastUpdateTime;
- // 构造器
- public ShakeListener(Context c) {
- // 获得监听对象
- mContext = c;
- start();
- }
- // 开始
- public void start() {
- // 获得传感器管理器
- sensorManager = (SensorManager) mContext
- .getSystemService(Context.SENSOR_SERVICE);
- if (sensorManager != null) {
- // 获得重力传感器
- sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
- }
- // 注册
- if (sensor != null) {
- sensorManager.registerListener(this, sensor,
- SensorManager.SENSOR_DELAY_GAME);
- }
- }
- // 停止检测
- public void stop() {
- sensorManager.unregisterListener(this);
- }
- // 设置重力感应监听器
- public void setOnShakeListener(OnShakeListener listener) {
- onShakeListener = listener;
- }
- // 重力感应器感应获得变化数据
- public void onSensorChanged(SensorEvent event) {
- // 现在检测时间
- long currentUpdateTime = System.currentTimeMillis();
- // 两次检测的时间间隔
- long timeInterval = currentUpdateTime - lastUpdateTime;
- // 判断是否达到了检测时间间隔
- if (timeInterval < UPTATE_INTERVAL_TIME)
- return;
- // 现在的时间变成last时间
- lastUpdateTime = currentUpdateTime;
- // 获得x,y,z坐标
- float x = event.values[0];
- float y = event.values[1];
- float z = event.values[2];
- // 获得x,y,z的变化值
- float deltaX = x - lastX;
- float deltaY = y - lastY;
- float deltaZ = z - lastZ;
- // 将现在的坐标变成last坐标
- lastX = x;
- lastY = y;
- lastZ = z;
- double speed = Math.sqrt(deltaX * deltaX + deltaY * deltaY + deltaZ
- * deltaZ)
- / timeInterval * 10000;
- // 达到速度阀值,发出提示
- if (speed >= SPEED_SHRESHOLD) {
- onShakeListener.onShake();
- }
- }
- public void onAccuracyChanged(Sensor sensor, int accuracy) {
- }
- // 摇晃监听接口
- public interface OnShakeListener {
- public void onShake();
- }
- }
package com.novasky.utils;import android.content.Context;import android.hardware.Sensor;import android.hardware.SensorEvent;import android.hardware.SensorEventListener;import android.hardware.SensorManager;public class ShakeListener implements SensorEventListener {String TAG = "ShakeListener";// 速度阈值,当摇晃速度达到这值后产生作用private static final int SPEED_SHRESHOLD = 3000;// 两次检测的时间间隔private static final int UPTATE_INTERVAL_TIME = 70;// 传感器管理器private SensorManager sensorManager;// 传感器private Sensor sensor;// 重力感应监听器private OnShakeListener onShakeListener;// 上下文private Context mContext;// 手机上一个位置时重力感应坐标private float lastX;private float lastY;private float lastZ;// 上次检测时间private long lastUpdateTime;// 构造器public ShakeListener(Context c) {// 获得监听对象mContext = c;start();}// 开始public void start() {// 获得传感器管理器sensorManager = (SensorManager) mContext.getSystemService(Context.SENSOR_SERVICE);if (sensorManager != null) {// 获得重力传感器sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);}// 注册if (sensor != null) {sensorManager.registerListener(this, sensor,SensorManager.SENSOR_DELAY_GAME);}}// 停止检测public void stop() {sensorManager.unregisterListener(this);}// 设置重力感应监听器public void setOnShakeListener(OnShakeListener listener) {onShakeListener = listener;}// 重力感应器感应获得变化数据public void onSensorChanged(SensorEvent event) {// 现在检测时间long currentUpdateTime = System.currentTimeMillis();// 两次检测的时间间隔long timeInterval = currentUpdateTime - lastUpdateTime;// 判断是否达到了检测时间间隔if (timeInterval < UPTATE_INTERVAL_TIME)return;// 现在的时间变成last时间lastUpdateTime = currentUpdateTime;// 获得x,y,z坐标float x = event.values[0];float y = event.values[1];float z = event.values[2];// 获得x,y,z的变化值float deltaX = x - lastX;float deltaY = y - lastY;float deltaZ = z - lastZ;// 将现在的坐标变成last坐标lastX = x;lastY = y;lastZ = z;double speed = Math.sqrt(deltaX * deltaX + deltaY * deltaY + deltaZ* deltaZ)/ timeInterval * 10000;// 达到速度阀值,发出提示if (speed >= SPEED_SHRESHOLD) {onShakeListener.onShake();}}public void onAccuracyChanged(Sensor sensor, int accuracy) {}// 摇晃监听接口public interface OnShakeListener {public void onShake();}}
应用代码:
- public class yaoAcitivity extends Activity {
- ShakeListener mShakeListener = null;
- private TextView tv;
- private ImageView iv;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- // TODO Auto-generated method stub
- super.onCreate(savedInstanceState);
- this.setContentView(R.layout.main);
- tv=(TextView)this.findViewById(R.id.textView1);
- iv=(ImageView)this.findViewById(R.id.imageView1);
- mShakeListener = new ShakeListener(this);
- mShakeListener.setOnShakeListener(new shakeLitener());
- }
- private class shakeLitener implements OnShakeListener{
- @Override
- public void onShake() {
- // TODO Auto-generated method stub
- tv.setText("摇一摇成功啦!");
- iv.setImageResource(R.drawable.attitude_laugh);
- mShakeListener.stop();
- }
- }
- }
0 0
- 手机摇摇代码
- Foursquare新功能:摇摇手机,签到轻松搞定
- 最近开发了一个款安卓手机应用【摇摇语音记事本】
- 电影摇摇
- 佛寺风飘飘,塔上幡摇摇
- 舟摇摇 风飘飘
- 用Qt摇摇骰子
- D3D开发-摇摇球
- 摇摇棒制作全过程
- 摇摇功能的实现
- 立波软件管家:方便管理安卓手机应用、应用搬家、快速摇摇卸载应用、应用备份(souapp.com搜应用网推荐)
- 基于PIC16F876A的摇摇棒
- 幸运摇摇看项目总结
- 手机代码大全
- Android手机隐藏代码
- 手机代码大全
- 手机震动android代码
- 手机清理内存代码
- ASP.NET FileUpload不经保存,直接读取上传文件的内容
- 心态,精力
- CCMenu的创建
- 程序中系统时间的获取
- LVS-DR工作原理图文详解
- 手机摇摇代码
- jquery选项卡切换
- cocos2d-x
- 浙大PAT 3-07. 求前缀表达式的值 (解题思路)
- 每个程序员都应该了解的内存知识
- 使用 CSS3 实现超炫的 Loading(加载)动画效果
- spring中context:property-placeholder/元素
- Objective-C 属性特性(assign , retain , copy , readonly , readwrite , atomic , nonatomic)
- 十二