关于重力感应的一个小例子
来源:互联网 发布:ruby精粹专家编程 pdf 编辑:程序博客网 时间:2024/04/30 11:29
关于重力感应的一个小例子
最近在做一个关于遥控小车的小项目,它可以通过手机实现重力感应操作、语音识别操作、实时视频传输以及地图定位等功能。当然,在这里只说重力感应这一点。
那么,我们就来说说手机的重力感应系统,它是通过对重力加速度敏感的传感器,感受手机的姿势变换,使手机光标的位置发生相应的变化,从而实现方向的改变。
具体来讲就是,利用手机内置的重力加速计,根据测量到的重力加速度方向在手机平面上两个坐标轴上的分量,来判断在手机上平面上的方向,并将它作为水平方向上的前后左右方向。 并将方向信息,通过手机蓝牙发送到小车,小车根据相应的方向信息调整自身的方向。
首先,我们不要求一开始就实现上述功能,我只需要实现简单的重力感应功能即可,并将其显示在屏幕上。要实现重力感应,我们得先建立三维坐标,即X轴、Y轴、Z轴。X、Y轴在手机平面上,而Z轴垂直于手机平面。
画界面,这界面不难,这里就不多说了,这需要定义四个TextView与三个EditText即可。四个TextView分别是“重力感应”、“X轴”、“Y轴”、“Z轴”,三个EditText分别是“Edit_X”“Edit_Y”、“Edit_Z”分别将重力感应的三个坐标分量显示出来。
我们知道,重力感应式手机自带的,我们只需要调用相关函数即可。所以,代码已不是很难,只是一般我们平时没去了解而已。
我们只需要定义一个重力感应监听事件SensorEventListener的对象mListener、一个重力感应管理SensorManager类型的mManager
,一个重力感应mSensor。
在打开的时候自动获取焦点,在获取焦点的同时,程序执行,在失去焦点时将自动退出程序。
代码片段如下:
mManager=(SensorManager)getSystemService(Context.SENSOR_SERVICE);
mSensor mManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
private SensorEventListener mListener = new SensorEventListener() {
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
public void onSensorChanged(SensorEvent event) {
float x = (int)(event.values[SensorManager.DATA_X]*10);
float y = (int)(event.values[SensorManager.DATA_Y]*10);
float z = (int)(event.values[SensorManager.DATA_Z]*10);
//要做的事情
doSomething(x, y, z);
}
};
//显示坐标到界面上
public void doSomething(float x,float y,float z){
edit_x.setText(x+"");
edit_y.setText(y+"");
edit_z.setText(z+"");
}
protected void onResume() {
super.onResume();
mManager.registerListener(mListener,mSensor,SensorManager.
SENSOR_DELAY_GAME);
}
protected void onPause() {
super.onPause();
mManager.unregisterListener(mListener);
}
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
本来,这个重力感应是很敏感的,放在我们认为静止的桌子上,X轴与Y轴的显示数据都不停地跳动。但经过我调整之后,将x、y、z的值分别乘以10之后再取整,就没那么敏感了!
即:
float x = (int)(event.values[SensorManager.DATA_X]*10);
float y = (int)(event.values[SensorManager.DATA_Y]*10);
float z = (int)(event.values[SensorManager.DATA_Z]*10);
实现的截图在这也就不传了,仅仅只是一个很简单很简洁的一个界面,毕竟仅仅只是用来获取重力感应的分量的。
好了,废话说得多了!这里就不再细讲了。
- 关于重力感应的一个小例子
- 关于cocos2dx里面的重力感应事件
- 关于物理引擎的使用,及其重力感应的小test
- Android重力感应代码例子
- IOS的重力感应
- android 重力感应的使用
- IOS 重力感应的实现
- Android 的重力感应DEMo
- 重力感应
- 重力感应
- 重力感应
- 重力感应
- 重力感应
- 关于cocos2d-html5 中使用重力感应于重力加速
- Android下的重力感应应用
- Android 开发中重力感应的实例
- cocos2d-x 重力感应 加速器的使用
- 使用UIDynamicAnimator创建重力感应的View
- linux 二级域名设置
- 调度作业(Oracle Scheduler)
- selenium与webdriver测试弹出窗口
- 接口与抽象类的区别 原文地址:http://blog.vsharing.com/jekkon/A1604115.html
- C++Vector用法
- 关于重力感应的一个小例子
- WMS-存储过程调用示例
- 五个同学的平均成绩
- NBUT 1513 Treasures【tarjan缩点+记忆化搜索】
- poj 2479 Maximum sum 两段不相交最大子段和
- [举重若轻]html5 history api实现单页面结构
- 数组大折腾
- ubuntu 创建桌面快捷方式
- windows mobile 6.5 输入法的切换