
本文介绍了Android编程实现的重力感应效果. 与您分享以供参考,如下:
Android中的许多游戏都使用重力感应技术,因此我们研究了重力感应
以屏幕左下方为原点,箭头方向为正. 以浮点数为等级单位,从-10到10安卓重力感应设置,请想象以下情况:


水平放置手机屏幕(z轴面向天空)时,(x,y,z)的值为(0,0,10);
将手机屏幕水平放置(z轴指向地面)时,(x,y,z)的值为(0,0,-10);
将手机屏幕放在左侧(x轴面向天空)时,(x,y安卓重力感应设置,z)的值为(10,0,0);
当手机直立时(y轴朝上),(x,y,z)的值为(0,10,0);

其他人也是如此,规律是: 天空是正数,地面是负数.
使用x,y和z的三个值找到三角函数,可以准确地检测到手机的运动状态.
代码示例:
AndroidManifest.xml

复制代码,代码如下:
代码非常简单,直接查看源代码,最后提供源代码下载
Java代码:

package com.learn.sunboy;
import android.app.Activity;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.view.MotionEvent;
import android.widget.Toast;
public class TestSensor extends Activity{
private SensorManager mSensorManager = null;
private Sensor mSensor = null;
private float x, y, z;
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
mSensorManager = (SensorManager)this.getSystemService(SENSOR_SERVICE);
mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
}
SensorEventListener lsn = new SensorEventListener() {
@Override
public void onSensorChanged(SensorEvent event) {
x = event.values[SensorManager.DATA_X];
y = event.values[SensorManager.DATA_Y];
z = event.values[SensorManager.DATA_Z];
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
// TODO Auto-generated method stub
}
};
@Override
public boolean onTouchEvent(MotionEvent event){
if(event.getAction() == MotionEvent.ACTION_DOWN){
mSensorManager.registerListener(lsn, mSensor, SensorManager.SENSOR_DELAY_GAME);
String str = "x=" + x + "; y=" + y + "; z=" + z;
Toast.makeText(getApplicationContext(), str, Toast.LENGTH_LONG).show();
}
return super.onTouchEvent(event);
}
@Override
public void onResume(){
mSensorManager.registerListener(lsn, mSensor, SensorManager.SENSOR_DELAY_GAME);
super.onResume();
}
@Override
public void onPause(){
mSensorManager.unregisterListener(lsn);
super.onPause();
}
}
运行效果:

注意: 这是模拟器(SDK V1.5)上的屏幕截图. 由于模拟器无法感应重力,请在物理机上对其进行测试
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/sanxing/article-169201-1.html
o