Android重力感应代码例子

news/2024/7/4 9:46:06

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

<uses-permission android:name="android.hardware.sensor.accelerometer"/>


代码很简单,直接看源码,最后提供了源码下载

Java Code:

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), 由于模拟器无法感应重力,请大家在物理机上测试


源码下载



文章转自: http://blog.csdn.net/sunboy_2050/article/details/6741092

http://www.niftyadmin.cn/n/3649340.html

相关文章

react中创建一个组件_如何在React中创建社交关注组件

react中创建一个组件介绍 (Introduction) When you’re building a web site, you’ll often want to share your Social Media accounts for visitors to follow. In this tutorial, you’ll create a Social Follow component in React, using the social media icons provid…

软件框架之imageloader的使用

Imageloader的使用 一、特点&#xff1a; 1&#xff09;多线程下载图片&#xff0c;图片可以来源于网络&#xff0c;文件系统&#xff0c;项目文件夹assets中以及drawable中等 2&#xff09;支持随意的配置ImageLoader&#xff0c;例如线程池&#xff0c;图片下载器&#xff…

实验三(OSPF)7 8

解题思路&#xff1a; 先配置好路由的环回及规划好IP地址&#xff0c;确保正确&#xff1b; &#xff08;由于r8模拟为运营商&#xff0c;因此r1,r2,r3各写一条缺省指向r8 并测试&#xff09; hub-spoke网络结构&#xff0c;需要在r1-r2-r3建立隧道0配置MGRE-多点通用路由协…

HarmonyOS 2.0 手机版使用初体验 ——手机开发者 (Beta版)

12月16日上午10点&#xff0c;华为在北京举办华为开发者日暨HarmonyOS2.0手机开发者Beta版发布活动。华为此次宣布面向手机开发者开放完整的HarmonyOS 2.0系统能力、丰富的API&#xff08;应用开发接口&#xff09;&#xff0c;以及强大的开发工具DevEco Studio等技术装备&…

angular4前后端分离_如何在Angular 4+中使用Apollo客户端GraphQL

angular4前后端分离Apollo Client is the flexible, community-driven GraphQL client for Angular, JavaScript, and native platforms. It is designed from the ground up to make it easy to build UI components that fetch data with GraphQL. This article is a quick s…

软件框架之ButterKnife的使用

1、简介ButterKnife是注解中相对简单易懂的很不错的开源框架1.强大的View绑定和Click事件处理功能&#xff0c;简化代码&#xff0c;提升开发效率2.方便的处理Adapter里的ViewHolder绑定问题3.运行时不会影响APP效率&#xff0c;使用配置方便4.代码清晰&#xff0c;可读性强2、…

python pyenv_如何使用Pyenv和Direnv管理Python

python pyenv介绍 (Introduction) Whether you’re just getting started or you’re a seasoned Python developer, you may have found managing your Python environments to be tedious and painful. Managing Python versions, libraries, and various dependencies is li…