android “摇一摇” 代码实现
来源:互联网 发布:网络神曲 编辑:程序博客网 时间:2024/06/02 02:17
核心接口代码:
import android.content.Context;import android.hardware.Sensor;import android.hardware.SensorEvent;import android.hardware.SensorEventListener;import android.hardware.SensorManager;import android.util.Log;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; Log.v(TAG, "===========log==================="); // 达到速度阀值,发出提示 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(); } }}
- android “摇一摇” 代码实现
- android “摇一摇” 代码实现
- Android截图代码实现
- [Android]代码实现StateListDrawable
- Android截图代码实现
- Android实现关机代码
- android代码实现自动关机
- android实现自动关机代码
- android实现自动关机代码
- android 实现代码关机
- android代码实现关机
- android 实现全屏代码
- android-打电话代码实现
- android 实现录音代码
- android代码实现渐变
- android 实现代码混淆
- android 实现代码混淆
- android 实现代码混淆
- java中的IO基础3
- 总结一下各种IO方式
- Ubuntu12.04安装kvm简介
- 数据库分区分表
- Linux多线程编程(不限Linux)
- android “摇一摇” 代码实现
- DirectX 3D_基础之光照 材质 顶点法线 光源 纹理映射 纹理坐标 多级纹理 纹理过滤
- asp.net实验二:连接sql server 2008数据库
- 《学习OpenCV》练习题第二章第四题
- C++学习笔记之函数返回值
- 又是指针
- ERROR OGG-00222 及查看是否开启DDL
- Win7 X32MyEclipse10.1破解
- 大话存储系列19——数据备份与恢复 下