- 浏览: 473543 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
bewithme:
我把一个透明背景的PNG画到了另外一张图片上,为啥透明背景就变 ...
Java绘制PNG图片时的黑色背景问题 -
davidwkj:
Y坐标的公式不对。算出来的值是错的!!!!!!!!!!!!!! ...
两条线段是否相交,计算交点公式。 -
zhang9181156:
茅塞顿开哈,感谢
android--相机开发 -
leecinwell:
哈
Android条用照相机,实现可剪切功能 -
life_菜鸟飞:
非常感谢作者这么详细的讲解,自己也动手实践了一下,发现前面几个 ...
android--相机开发
重力感应主要是依靠手机的加速度传感器(accelerometer)来实现
在Android的开发中一共有八种传感器但是不一定每一款真机都支持这些传感器。因为很多功能用户根本不care的所以可能开发商会把某些功能屏蔽掉。还是得根据真机的实际情况来做开发,今天我们主要来讨论加速度传感器的具体实现方式。
传感器名称如下:
加速度传感器(accelerometer)
陀螺仪传感器(gyroscope)
环境光照传感器(light)
磁力传感器(magnetic field)
方向传感器(orientation)
压力传感器(pressure)
距离传感器(proximity)
温度传感器(temperature)
1.SensorMannager传感器管理对象
手机中的所有传感器都须要通过SensorMannager来访问,调用getSystemService(SENSOR_SERVICE)方法就可以拿到当前手机的传感器管理对象。
java代码:
- SensorManager mSensorMgr = (SensorManager) getSystemService(SENSOR_SERVICE);
2.实现SensorEventListener接口
说道SensorEventListener接口就不得不说SensorListener接口。在Android1.5一下是通过实现SensorListener接口来捕获 手机传感器状态,但是在1.5以上如果实现这个接口系统会提示你这行代码已经过期。今天我们不讨论SensorListener因为它已经是过时的东西了。主要讨论一下SensorEventListener接口。我们须要实现SensorEventListener这个接口 onSensorChanged(SensorEvent event)方法来捕获手机传感器的状态,拿到手机 X轴Y轴Z轴三个方向的重力分量,有了这三个方向的数据重力感应的原理我们就已经学会了。
java代码:
- public void onSensorChanged(SensorEvent e) {
- float x = e.values[SensorManager.DATA_X];
- float y = e.values[SensorManager.DATA_Y];
- float z = e.values[SensorManager.DATA_Z];
- }
手机屏幕向左侧方当X轴就朝向天空,垂直放置 这时候 Y 轴 与 Z轴没有重力分量,因为X轴朝向天空所以它的重力分量则最大 。这时候X轴 Y轴 Z轴的重力分量的值分别为(10,0,0)
手机屏幕向右侧方当X轴就朝向地面,垂直放置 这时候 Y 轴 与 Z轴没有重力分量,因为X轴朝向地面所以它的重力分量则最小 。这时候X轴 Y轴 Z轴的重力分量的值分别为(-10,0,0)
手机屏幕垂直竖立放置方当Y轴就朝向天空,垂直放置 这时候 X 轴 与 Z轴没有重力分量,因为Y轴朝向天空所以它的重力分量则最大 。这时候X轴 Y轴 Z轴的重力分量的值分别为(0,10,0)
手机屏幕垂直竖立放置方当Y轴就朝向地面,垂直放置 这时候 X 轴 与 Z轴没有重力分量,因为Y轴朝向地面所以它的重力分量则最小 。这时候X轴 Y轴 Z轴的重力分量的值分别为(0,-10,0)
手机屏幕向上当Z轴就朝向天空,水平放置 这时候 X 轴与Y轴没有重力分量,因为Z轴朝向天空所以它的重力分量则最大 。这时候X轴 Y轴 Z轴的重力分量的值分别为(0,0,10)
手机屏幕向上当Z轴就朝向地面,水平放置 这时候 X 轴与Y轴没有重力分量,因为Z轴朝向地面所以它的重力分量则最小 。这时候X轴 Y轴 Z轴的重力分量的值分别为(0,0,-10)
因为这张图片是在模拟器上截得,所以没有重力感应它的三个方向的的重力分量都为0。
3.注册SensorEventListener
使用SensorMannager调用getDefaultSensor(Sensor.TYPE_ACCELEROMETER)方法拿到加速重力感应的Sensor对象。因为本章我们讨论重力加速度传感器所以参数为Sensor.TYPE_ACCELEROMETER,如果须要拿到其它的传感器须要传入对应的名称。使用SensorMannager调用registerListener()方法来注册,第三个参数是检测的灵敏精确度根据不同的需求来选择精准度,游戏开发建议使用 SensorManager.SENSOR_DELAY_GAME。
java代码:
- mSensorMgr = (SensorManager) getSystemService(SENSOR_SERVICE);
- mSensor = mSensorMgr.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
- // 注册listener,第三个参数是检测的精确度
- //SENSOR_DELAY_FASTEST 最灵敏 因为太快了没必要使用
- //SENSOR_DELAY_GAME 游戏开发中使用
- //SENSOR_DELAY_NORMAL 正常速度
- //SENSOR_DELAY_UI 最慢的速度
- mSensorMgr.registerListener(this, mSensor, SensorManager.SENSOR_DELAY_GAME);
重力感应简单速度计算的方式。 每次摇晃手机计算出 X轴 Y轴 Z轴的重力分量可以将它们记录下来 然后每次摇晃的重力分量和之前的重力分量可以做一个对比 利用差值和时间就可以计算出他们的移动速度。
java代码:
- private SensorManager sensorMgr;
- Sensor sensor = sensorMgr.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
- //保存上一次 x y z 的坐标
- float bx = 0;
- float by = 0;
- float bz = 0;
- long btime = 0;//这一次的时间
- sensorMgr = (SensorManager) getSystemService(SENSOR_SERVICE);
- SensorEventListener lsn = new SensorEventListener() {
- public void onSensorChanged(SensorEvent e) {
- float x = e.values[SensorManager.DATA_X];
- float y = e.values[SensorManager.DATA_Y];
- float z = e.values[SensorManager.DATA_Z];
- //在这里我们可以计算出 X Y Z的数值 下面我们就可以根据这个数值来计算摇晃的速度了
- //我想大家应该都知道计算速度的公事 速度 = 路程/时间
- //X轴的速度
- float speadX = (x - bx) / (System.currentTimeMillis() - btime);
- //y轴的速度
- float speadY = (y - by) / (System.currentTimeMillis() - btime);
- //z轴的速度
- float speadZ = (z - bz) / (System.currentTimeMillis() - btime);
- //这样简单的速度就可以计算出来 如果你想计算加速度 也可以 在运动学里,加速度a与速度,
- //位移都有关系:Vt=V0+at,S=V0*t+1/2at^2, S=(Vt^2-V0^2)/(2a),根据这些信息也可以求解a。
- //这里就不详细介绍了 公事 应该初中物理课老师就教了呵呵~~
- bx = x;
- by = y;
- bz = z;
- btime = System.currentTimeMillis();
- }
- public void onAccuracyChanged(Sensor s, int accuracy) {
- }
- };
- // 注册listener,第三个参数是检测的精确度
- sensorMgr.registerListener(lsn, sensor, SensorManager.SENSOR_DELAY_GAME);
java代码:
|
发表评论
-
浅析android应用增量升级
2013-05-29 13:31 2740背景 随着android应用体积的不断增大 ... -
Activity是如何生成一个 view 的
2013-05-16 11:09 1379Activity是一个工人,它来控制Window;Windo ... -
Android 获取新浪天气预报数据
2012-12-07 13:07 3102新浪天气预报地址: http://php.weathe ... -
Android连接网络问题
2012-11-23 11:14 2068一、检查网络是否连接 方法一、 publ ... -
Android异步下载图片并且缓存图片到本地
2012-09-06 16:21 1951转来的,以备不时之需!! 在Android开发中 ... -
Android条用照相机,实现可剪切功能
2012-08-12 12:35 4633public class CameraActivity ... -
android--相机开发
2012-08-10 08:17 11641在android中应用相机功能,一般有两种:一种是直接调 ... -
15个令人震惊的HTML5效果
2012-07-04 10:09 137015个令人震惊的HTML5效果 除非你一直 ... -
Android 读写文件的N种写法
2012-07-04 09:54 1123Android 读写文件的N种写法(待续。。。) ... -
如何干掉360(付代码)
2012-06-29 16:09 1374最近360很凶,有推送的,有桌面图标的,全部会被提示有风 ... -
Cocos2d-x跨Android&iOS平台开发入门
2012-06-26 10:22 1586好吧,确实存在这 ... -
解决Android加载图片时内存溢出的问题
2012-06-18 13:52 46394尽量不要使用setImageBitmap或setImag ... -
android 代码 混淆
2012-06-04 10:22 20831、得到 classes.dex文件;直接用你机器上的 ... -
android代码混淆是出现Conversion to Dalvik format failed with error 1的解决方法
2012-06-04 10:18 4503最近做android项目,给代码混淆时遇到问题,在项目加入混淆 ... -
Surface、SurfaceView、SurfaceHolder及SurfaceHolder.Callback之间的关系
2012-03-20 16:44 1928一、Surface Surface就是“表面”的意思。 ... -
Re-installation failed解决方法
2011-12-27 22:49 4871我的方法:去模拟器卸载上次安装的*.apk ... -
Failed to install *.apk on device 'emulator-5554': timeout
2011-12-20 00:31 9328错误提示: Failed to inst ... -
android 中的 Bitmap
2011-12-20 00:32 3970在Android SDK中说明可以支持的图片格式如下:p ... -
Android中资源文件夹res/raw和assets的使用
2011-12-16 20:37 9573*res/raw和assets的相同点: 1.两者目录 ... -
为不同分辨率的手机创建界面
2011-12-16 20:36 15131,首先进入res 文件夹下。 2,创建一个名为“la ...
相关推荐
Android小球重力感应运动有碰撞声源码.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
在Android平台上,开发一款利用重力感应功能的小球...总之,Android小球重力感应代码示例是一个实用的实践项目,它涵盖了Android传感器API、事件处理、物理运动模拟等多个知识点,对于提升Android开发技能十分有益。
这个"Android小球重力感应源码"项目很可能是为了帮助开发者理解如何将手机的重力感应数据应用到游戏或者动态效果中。 首先,我们要了解Android的Sensor API。Android系统提供了SensorManager服务,用于管理设备上的...
本项目“Android小球重力感应运动(有碰撞声)源码”提供了一个完整的示例,展示了如何利用Android的传感器API来捕捉设备的重力变化,使屏幕上的小球模拟真实世界的物理运动,并在碰撞时产生声音反馈。 首先,我们...
Android 重力感应游戏-疯狂的小球源码程序,基于Android 平台的重力感应游戏-疯狂的小球。
在"Unity Android版重力感应小球"项目中,开发者利用Unity3D的特性构建了一个移动设备上的游戏,玩家可以通过设备的重力感应器来控制小球的移动。以下是对该项目涉及的关键技术点的详细解释: 1. **Unity3D**:...
该压缩包文件“Android小球重力感应运动有碰撞声源码的冲突文件2017-08-0410-24-13-524.rar”包含了Android平台上的一个特殊项目,该项目旨在实现一个基于重力感应的小球运动模拟,并在小球与边界或其它物体碰撞时...
在Android平台上,重力感应是通过传感器服务(Sensor Service)来实现的,它允许开发者获取设备的各种物理状态信息,如重力、加速度、陀螺仪等。在本"Android重力感应Demo"中,我们将深入探讨如何利用Android SDK中的...
本项目“Android游戏开发之小球重力感应源码”提供了实现这一功能的详细代码,帮助开发者了解如何将手机的重力感应数据应用到游戏逻辑中。 首先,我们需要了解Android系统是如何获取重力感应数据的。Android系统...
"疯狂的小球"作为一款这样的游戏,它充分展现了Android平台上的重力感应技术。下面将详细介绍重力感应游戏的设计原理、实现方式以及与"疯狂的小球"相关的技术要点。 1. 重力感应原理: Android设备中的加速度计是...
一个很独特的重力游戏,控制你的小球不断的转动重力以达到终点。
在Android平台上,重力感应功能是通过传感器系统服务来实现的,这允许应用程序接收设备的动态运动数据,如重力、加速度等。这个"Android手机平台重力感应Demo"是一个示例项目,用于演示如何在Android应用中利用重力...
android 重力感应测试项目源代码,作者:雨松MOMO。利用一个小球下落来模拟重力感应,进入游戏世界 - 强制横屏 -小球移动,显示自定义的游戏View,每50帧刷新一次屏幕,重力感应X轴 Y轴 Z轴的重力值,设置当前View...
首先,"小球重力感应源码"是这个实例的核心部分。Android系统提供了一个名为SensorManager的服务,用于获取设备的各种传感器数据,包括加速度传感器。加速度传感器可以捕捉到设备的移动和倾斜,这正是实现重力感应...
在Android平台上进行2D游戏开发是一项充满挑战和乐趣的任务,特别是在设计涉及物理模拟的游戏时,如本案例中的“重力感应足球”。这个小案例提供了一个实际应用,它利用了Android设备内置的加速度传感器,让玩家通过...
在Android平台中,重力感应主要是通过内置的三轴加速度传感器来实现的。该传感器可以检测设备在三维空间内的加速度变化,具体包括X、Y、Z三个方向上的加速度分量。这三个方向上的加速度可以被看作是一个位于三维坐标...
用unity3D简单的重力感应游戏,做的很粗糙,供大家参考吧,呵呵
这个名为“Flash重力感应实例”的项目,就是专门针对Android系统设计的一个演示程序,它利用设备的加速度传感器来捕捉用户的移动和倾斜,进而控制界面上的小球移动。下面我们将详细探讨这个实例涉及到的几个关键知识...