Android开发---摇一摇功能
来源:互联网 发布:苹果手机透明软件 编辑:程序博客网 时间:2024/05/21 14:42
以前做的一个小应用里面有摇一摇功能,有必要写下来做个笔记。
摇一摇功能主要用到加速度传感器:Sensor.TYPE_ACCELEROMETER
摇一摇功能主要是监听手机加速度变化,当超过设定的某一值时,即触发事件。
一、简单的一个示例
下给出一段简单的实现代码:
功能:原先textview1显示为“初始文本”, 当摇晃之后,textview1变为”摇一摇成功!!!“并伴随震动(点击按钮可回到”初始文本“)。
public class SensorTestActivity extends Activity implements SensorEventListener{TextView tv = null;Button button = null;SensorManager sensorManager = null;Vibrator vibrator = null;@Overridepublic 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(){@Overridepublic void onClick(View v){tv.setText("初始文本");}});sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);vibrator = (Vibrator) getSystemService(Service.VIBRATOR_SERVICE);}@Overrideprotected void onPause(){super.onPause();sensorManager.unregisterListener(this);}@Overrideprotected void onResume(){super.onResume();sensorManager.registerListener(this,sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),SensorManager.SENSOR_DELAY_NORMAL);}@Overridepublic void onAccuracyChanged(Sensor sensor, int accuracy){//当传感器精度改变时回调该方法,Do nothing.}@Overridepublic 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;}@Overridepublic 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();}}}@Overridepublic void onAccuracyChanged(Sensor sensor, int accuracy){//当传感器精度改变时回调该方法,Do nothing. }}
2. 注册部分
public class ShakeILikeActivity extends Activity{private ShakeListenerUtils shakeUtils;private SensorManager mSensorManager; //定义sensor管理器, 注册监听器用@Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_shake_i_like);shakeUtils = new ShakeListenerUtils(this);}@Overrideprotected 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);}@Overrideprotected void onPause(){mSensorManager.unregisterListener(shakeUtils);this.overridePendingTransition(R.anim.fade_in, R.anim.fade_out);//回退时闪一下super.onPause();}}
转载请注明出处:http://blog.csdn.net/xn4545945
- Android开发---摇一摇功能
- Android开发---摇一摇功能
- Android开发---摇一摇功能
- Android开发---摇一摇功能
- Android开发,实现摇一摇功能
- android分享功能开发!!!
- android 分享功能开发
- android分享功能开发
- android 功能开发笔记
- android表情功能开发
- Android开发常用功能
- Android WiFi功能开发
- Android手机开发:Menu功能
- Android蓝牙通信功能开发
- Android蓝牙通信功能开发 .
- Android开发之打电话功能
- Android开发一些小功能
- Android WIFI功能开发<1>
- 导入android项目,无法自动生成R文件的解决方法(Unable to resolve target 'android-7')
- 记录一个 查看Activity 堆栈情况的命令:adb shell dumpsys activity
- 注解POLoad属性保存
- 如何掌握多处理器编程技巧
- libcurl入门
- Android开发---摇一摇功能
- DirectShow概述
- 大于4G的文件拷贝到空间足够的U盘中,总是提示空间不足,该怎么办
- Android双击返回键退出程序代码
- QImage 图像格式小结
- 第十二次课外作业
- 一次数学比赛,共有A,B和C三道题目。所有人都至少解答出一道题目,总共有25人----网易游戏笔试题
- 常用的ubuntu第三方工具及android命令
- error MSB3073: :VCEnd”已退出,代码为 6