Android开发---摇一摇功能
2013-05-31 16:39
260 查看
以前做的一个小应用里面有摇一摇功能,有必要写下来做个笔记。
摇一摇功能主要用到加速度传感器:Sensor.TYPE_ACCELEROMETER
摇一摇功能主要是监听手机加速度变化,当超过设定的某一值时,即触发事件。
一、简单的一个示例
下给出一段简单的实现代码:
功能:原先textview1显示为“初始文本”, 当摇晃之后,textview1变为”摇一摇成功!!!“并伴随震动(点击按钮可回到”初始文本“)。
二、更加灵活一点的写法
可以将监听部分与注册部分分开,这样的好处就是实现监听的代码复用。
以下贴几段以前的几段代码。
1. 监听部分
2. 注册部分
转载请注明出处:http://blog.csdn.net/xn4545945
摇一摇功能主要用到加速度传感器:Sensor.TYPE_ACCELEROMETER
摇一摇功能主要是监听手机加速度变化,当超过设定的某一值时,即触发事件。
一、简单的一个示例
下给出一段简单的实现代码:
功能:原先textview1显示为“初始文本”, 当摇晃之后,textview1变为”摇一摇成功!!!“并伴随震动(点击按钮可回到”初始文本“)。
public class SensorTestActivity extends Activity implements SensorEventListener { TextView tv = null; Button button = null; SensorManager sensorManager = null; Vibrator vibrator = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); button = (Button) findViewById(R.id.button1); tv = (TextView) findViewById(R.id.textview1); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { tv.setText("初始文本"); } }); sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE); vibrator = (Vibrator) getSystemService(Service.VIBRATOR_SERVICE); } @Override protected void onPause() { super.onPause(); sensorManager.unregisterListener(this); } @Override protected void onResume() { super.onResume(); sensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_NORMAL); } @Override public void onAccuracyChanged(Sensor sensor, int accuracy) { //当传感器精度改变时回调该方法,Do nothing. } @Override public void onSensorChanged(SensorEvent event) { int sensorType = event.sensor.getType(); //values[0]:X轴,values[1]:Y轴,values[2]:Z轴 float[] values = event.values; if (sensorType == Sensor.TYPE_ACCELEROMETER) { if ((Math.abs(values[0]) > 17 || Math.abs(values[1]) > 17 || Math .abs(values[2]) > 17)) { Log.d("sensor x ", "============ values[0] = " + values[0]); Log.d("sensor y ", "============ values[1] = " + values[1]); Log.d("sensor z ", "============ values[2] = " + values[2]); tv.setText("摇一摇成功!!!"); //摇动手机后,再伴随震动提示~~ vibrator.vibrate(500); } } } }
二、更加灵活一点的写法
可以将监听部分与注册部分分开,这样的好处就是实现监听的代码复用。
以下贴几段以前的几段代码。
1. 监听部分
public class ShakeListenerUtils implements SensorEventListener { private Activity context; public ShakeListenerUtils(Activity context) { super(); this.context = context; } @Override public void onSensorChanged(SensorEvent event) { int sensorType = event.sensor.getType(); //values[0]:X轴,values[1]:Y轴,values[2]:Z轴 float[] values = event.values; if (sensorType == Sensor.TYPE_ACCELEROMETER) { /*正常情况下,任意轴数值最大就在9.8~10之间,只有在突然摇动手机 的时候,瞬时加速度才会突然增大或减少。 监听任一轴的加速度大于17即可 */ if ((Math.abs(values[0]) > 17 || Math.abs(values[1]) > 17 || Math .abs(values[2]) > 17)) { context.overridePendingTransition(R.anim.zoom_out_enter, R.anim.zoom_out_exit); //检测到晃动后启动OpenDoor效果 Intent intent = new Intent(context, OpenDoorActivity.class); context.startActivity(intent); context.finish(); } } } @Override public void onAccuracyChanged(Sensor sensor, int accuracy) { //当传感器精度改变时回调该方法,Do nothing. } }
2. 注册部分
public class ShakeILikeActivity extends Activity { private ShakeListenerUtils shakeUtils; private SensorManager mSensorManager; //定义sensor管理器, 注册监听器用 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_shake_i_like); shakeUtils = new ShakeListenerUtils(this); } @Override protected void onResume() { super.onResume(); //获取传感器管理服务 mSensorManager = (SensorManager) this .getSystemService(Service.SENSOR_SERVICE); //加速度传感器 mSensorManager.registerListener(shakeUtils, mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), //还有SENSOR_DELAY_UI、SENSOR_DELAY_FASTEST、SENSOR_DELAY_GAME等, //根据不同应用,需要的反应速率不同,具体根据实际情况设定 SensorManager.SENSOR_DELAY_NORMAL); } @Override protected void onPause() { mSensorManager.unregisterListener(shakeUtils); this.overridePendingTransition(R.anim.fade_in, R.anim.fade_out);//回退时闪一下 super.onPause(); } }
转载请注明出处:http://blog.csdn.net/xn4545945
相关文章推荐
- Android开发学习之摇一摇功能的简单实现
- android开发利用传感器实现微信的摇一摇功能(zz)
- Android移动开发-利用加速度传感器开发仿微信摇一摇功能的实现
- Android开发---摇一摇功能
- Android开发,实现摇一摇功能
- android重力感应开发之微信摇一摇功能
- Android开发,项目中实现的摇一摇功能。使用加速度传感器SensorEventListener
- android开发利用传感器实现微信的摇一摇功能
- android开发利用传感器实现微信的摇一摇功能
- Android开发---摇一摇功能
- Android平台开发-WIFI function porting-WIFI功能移植
- Android平台开发-WIFI function porting-WIFI功能移植
- 【Android 开发教程】ListView的扩展功能
- android开发我的新浪微博客户端-阅读微博功能篇(6.2)
- Android百度地图开发—定位显示以及自定义缩放功能(三)
- JoyStick for android2.3 游戏手柄功能开发
- Android平台开发-WIFI function porting-WIFI功能移植
- Android开发不申请权限来使用对应功能
- Android开发本地及网络Mp3音乐播放器(十四)网络音乐下载功能实现
- 玩转Android Camera开发(一):Surfaceview预览Camera,基础拍照功能完整demo