• 传感器的使用


    传感器类型:方向、加速度(重力)、光线、磁场、距离(临近性)、温度等。

      方向传感器:   Sensor.TYPE_ORIENTATION

      加速度(重力)传感器: Sensor.TYPE_ACCELEROMETER

      光线传感器:    Sensor.TYPE_LIGHT

      磁场传感器:   Sensor.TYPE_MAGNETIC_FIELD

      距离(临近性)传感器: Sensor.TYPE_PROXIMITY

      温度传感器:   Sensor.TYPE_TEMPERATURE

    //获取某种类型的感应器

    Sensor sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);

    //注册监听,获取传感器变化值

    sensorManager.registerListener(listener, sensor, SensorManager.SENSOR_DELAY_GAME);

    上面第三个参数为采样率:最快、游戏、普通、用户界面。当应用程序请求特定的采样率时,其实只是对传感器子系统的一个建议,不保证特定的采样率可用。

    最快: SensorManager.SENSOR_DELAY_FASTEST

    最低延迟,一般不是特别敏感的处理不推荐使用,该种模式可能造成手机电力大量消耗,由于传递的为原始数据,算法不处理好将会影响游戏逻辑和UI的性能。

    游戏: SensorManager.SENSOR_DELAY_GAME

    游戏延迟,一般绝大多数的实时性较高的游戏都使用该级别。

    普通: SensorManager.SENSOR_DELAY_NORMAL

    标准延迟,对于一般的益智类或EASY级别的游戏可以使用,但过低的采样率可能对一些赛车类游戏有跳帧现象。

    用户界面: SensorManager.SENSOR_DELAY_UI

    一般对于屏幕方向自动旋转使用,相对节省电能和逻辑处理,一般游戏开发中我们不使用。

    指南针Demo:

      

    复制代码
     1 package com.android.hzy.sensor;
     2 
     3 import android.app.Activity;
     4 import android.content.Context;
     5 import android.hardware.Sensor;
     6 import android.hardware.SensorEvent;
     7 import android.hardware.SensorEventListener;
     8 import android.hardware.SensorManager;
     9 import android.os.Bundle;
    10 import android.view.animation.Animation;
    11 import android.view.animation.RotateAnimation;
    12 import android.widget.ImageView;
    13 
    14 public class MainActivity extends Activity {
    15 
    16     private SensorManager sensorManager;
    17     private Sensor sensor;
    18     private MySensorEventListener listener;
    19     private ImageView iv;
    20     
    21     @Override
    22     protected void onCreate(Bundle savedInstanceState) {
    23         super.onCreate(savedInstanceState);
    24         setContentView(R.layout.activity_main);
    25         
    26         iv = (ImageView) findViewById(R.id.iv);
    27         iv.setKeepScreenOn(true);// 保持屏幕的高亮
    28         
    29         // 得到sensor管理器
    30         sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
    31         sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION);// 得到方向传感器
    32         
    33         listener = new MySensorEventListener();
    34         
    35     }
    36     
    37     /**
    38      * 第三个参数为采样率:最快、游戏、普通、用户界面。当应用程序请求特定的采样率时,其实只是对传感器子系统的一个建议,不保证特定的采样率可用。
    39         最快: SensorManager.SENSOR_DELAY_FASTEST
    40         最低延迟,一般不是特别敏感的处理不推荐使用,该种模式可能造成手机电力大量消耗,由于传递的为原始数据,算法不处理好将会影响游戏逻辑和UI的性能。
    41         游戏: SensorManager.SENSOR_DELAY_GAME
    42         游戏延迟,一般绝大多数的实时性较高的游戏都使用该级别。
    43         普通: SensorManager.SENSOR_DELAY_NORMAL 
    44         标准延迟,对于一般的益智类或EASY级别的游戏可以使用,但过低的采样率可能对一些赛车类游戏有跳帧现象。
    45         用户界面: SensorManager.SENSOR_DELAY_UI
    46      */
    47 
    48     @Override
    49     protected void onResume() {
    50         // TODO Auto-generated method stub
    51         super.onResume();
    52         // 注册sensor监听  传感器非常的消耗性能,显示在前台的时候再注册监听
    53         sensorManager.registerListener(listener, sensor, SensorManager.SENSOR_DELAY_GAME);
    54     }
    55     
    56     @Override
    57     protected void onPause() {
    58         // TODO Auto-generated method stub
    59         super.onPause();
    60         // 取消监听
    61         sensorManager.unregisterListener(listener);
    62     }
    63     
    64     /**
    65      * 传感器事件监听
    66      * @author Administrator
    67      *
    68      */
    69     private final class MySensorEventListener implements SensorEventListener{
    70 
    71         private float predegree = 0;
    72         
    73         @Override
    74         public void onSensorChanged(SensorEvent event) {
    75             // TODO Auto-generated method stub
    76             float x = event.values[SensorManager.DATA_X];
    77             float y = event.values[SensorManager.DATA_Y];
    78             float z = event.values[SensorManager.DATA_Z];
    79             
    80             // 指南针只需用到X轴
    81             RotateAnimation animation = new RotateAnimation(-predegree, x, //
    82                     Animation.RELATIVE_TO_SELF, 0.5f, //
    83                     Animation.RELATIVE_TO_SELF, 0.5f);
    84             
    85             animation.setDuration(200);
    86             iv.startAnimation(animation);
    87             
    88             predegree = x;
    89         }
    90         
    91         @Override
    92         public void onAccuracyChanged(Sensor sensor, int accuracy) {
    93             // TODO Auto-generated method stub
    94             
    95         }
    96         
    97     }
    98     
    99 }
  • 相关阅读:
    Keil(MDK) 5 软件安装教程
    JPA 的specification动态查询
    idea 建立JPA项目(二)
    HBase单节点的安装与配置
    【codevs3012+codevs3037】线段覆盖4+线段覆盖5(DP)
    MySQL下载和安装教程
    二、单线程的 JavaScript
    #JS 基础之异步(一)
    JS 基础之: 继承的 六 种实现方式
    源码浅析-Vue3中的13个全局Api
  • 原文地址:https://www.cnblogs.com/laughingQing/p/4848500.html
Copyright © 2020-2023  润新知