由Android编程实现的重力感应示例代码

电脑杂谈  发布时间:2020-04-09 08:21:24  来源:网络整理

安卓重力感应设置_iphone7重力感应设置_苹果重力感应设置

本文介绍了Android编程实现的重力感应效果. 与您分享以供参考,如下:

Android中的许多游戏都使用重力感应技术,因此我们研究了重力感应

以屏幕左下方为原点,箭头方向为正. 以浮点数为等级单位,从-10到10安卓重力感应设置,请想象以下情况:

iphone7重力感应设置_安卓重力感应设置_苹果重力感应设置

水平放置手机屏幕(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);

iphone7重力感应设置_安卓重力感应设置_苹果重力感应设置

其他人也是如此,规律是: 天空是正数,地面是负数.

使用x,y和z的三个值找到三角函数,可以准确地检测到手机的运动状态.

代码示例:

AndroidManifest.xml

iphone7重力感应设置_苹果重力感应设置_安卓重力感应设置

复制代码,代码如下:

代码非常简单,直接查看源代码,最后提供源代码下载

Java代码:

iphone7重力感应设置_苹果重力感应设置_安卓重力感应设置

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

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...