当前位置: 首页 > 编程笔记 >

Android编程之方向传感器用法示例

公西鸿博
2023-03-14
本文向大家介绍Android编程之方向传感器用法示例,包括了Android编程之方向传感器用法示例的使用技巧和注意事项,需要的朋友参考一下

本文实例讲述了Android编程之方向传感器用法。分享给大家供大家参考,具体如下:

/**
 * 传感器指针Demo
 *
 * @description:
 * @author ldm
 * @date 2016-4-25 下午5:29:18
 */
public class SensorHandActivity extends GraphicsActivity {
  // 传感器管理对象
  private SensorManager mSensorManager;
  // 传感器类
  private Sensor mSensor;
  // 自定义绘制指针View
  private MyCompassView mView;
  /**
   * 方向传感器检测到的感应值 values[0]: Azimuth(方位),地磁北方向与y轴的角度,围绕z轴旋转(0到359)。0=North,
   * 90=East, 180=South, 270=West values[1]: Pitch(俯仰),围绕X轴旋转(-180 to 180),
   * 当Z轴向Y轴运动时是正值 values[2]: Roll(滚),围绕Y轴旋转(-90 to 90),当X轴向Z轴运动时是正值
   */
  private float[] mValues;
  // 传感监听
  private final SensorEventListener mSensorListener = new SensorEventListener() {
    public void onSensorChanged(SensorEvent event) {
      mValues = event.values;
      if (mView != null) {
        mView.invalidate();
      }
    }
    public void onAccuracyChanged(Sensor sensor, int accuracy) {
    }
  };
  @SuppressWarnings("deprecation")
  @Override
  protected void onCreate(Bundle icicle) {
    super.onCreate(icicle);
    mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
    mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION);
    mView = new MyCompassView(this);
    setContentView(mView);
  }
  @Override
  protected void onResume() {
    super.onResume();
    /**
     * 在onResume方法中注册传感器监听 事件
     * 第一个参数:监听Sensor事件,第二个参数是Sensor目标种类的值,第三个参数是延迟时间的精度密度。延迟时间的精密度参数 参数
     * 延迟时间 SensorManager.SENSOR_DELAY_FASTEST 0ms
     * SensorManager.SENSOR_DELAY_GAME 20ms SensorManager.SENSOR_DELAY_UI
     * 60ms SensorManager.SENSOR_DELAY_NORMAL 200ms
     */
    mSensorManager.registerListener(mSensorListener, mSensor,
        SensorManager.SENSOR_DELAY_GAME);
  }
  @Override
  protected void onStop() {
    // 在onStop方法中取消注册监听
    mSensorManager.unregisterListener(mSensorListener);
    super.onStop();
  }
  private class MyCompassView extends View {
    // 定义画笔Paint
    private Paint mPaint;
    // 定义绘制指针的路径Path
    private Path mPath;
    public MyCompassView(Context context) {
      super(context);
      initPaintAndPath();
    }
    private void initPaintAndPath() {
      // 初始化画笔
      mPaint = new Paint();
      mPaint.setAntiAlias(true);
      mPaint.setColor(Color.BLACK);
      mPaint.setStyle(Paint.Style.FILL);
      // 初始化绘制路径
      mPath = new Path();
      mPath.moveTo(0, -50);// 移动到指点点
      mPath.lineTo(-20, 60);// 用线条连接到指定点
      mPath.lineTo(0, 50);
      mPath.lineTo(20, 60);
      mPath.close();// 关闭路径
    }
    @Override
    protected void onDraw(Canvas canvas) {
      // 设置画面背景
      canvas.drawColor(Color.WHITE);
      int w = canvas.getWidth();
      int h = canvas.getHeight();
      int cx = w / 2;
      int cy = h / 2;
      canvas.translate(cx, cy);// 移动画面,把指针放到中央
      if (mValues != null) {
        canvas.rotate(-mValues[0]);
      }
      canvas.drawPath(mPath, mPaint);
    }
  }
}

更多关于Android相关内容感兴趣的读者可查看本站专题:《Android基本组件用法总结》、《Android视图View技巧总结》、《Android布局layout技巧总结》、《Android资源操作技巧汇总》、《Android文件操作技巧汇总》、《Android开发入门与进阶教程》、《Android编程之activity操作技巧总结》及《Android控件用法总结》

希望本文所述对大家Android程序设计有所帮助。

 类似资料:
  • 监听手机方向 在手机淘宝中:这里的监听陀螺仪, 实际是为了监听手机方向的改变 ,使得 H5 页面可以根据手机方向做出不同反应。在手机中,有两个传感器可以实现这一目的:陀螺仪和重力感应器。陀螺仪可以得到手机空间位置的欧拉角:roll、pitch 和 yaw,重力感应器则可以得到重力在手机三个方向上的分量。 但是,由于在 iOS 和 Android 平台下得到的陀螺仪数据暂时难以统一,而重力感应器的数

  • 主要内容:本节引言:,1.三维坐标系的概念:,2.方向传感器的三个值,3.简单的Demo帮助我们理解这三个值的变化:,4.一个简易版的文字指南针示例,5.本节示例代码下载:,本节小结:本节引言: 在上一节中我们中我们对传感器的一些基本概念进行了学习,以及学习了使用传感器的套路, 本节给大家带来的传感器是方向传感器的用法,好的,开始本节内容~ 1.三维坐标系的概念: 在Android平台中,传感器框架通常是使用一个标准的三维坐标系来表示一个值的。以本节 要讲的方向传感器为例子,确定一个方向也需要一

  • 问题内容: 我目前正在开发一个使用多个传感器的android应用程序,在Method中使用了该方法来获取传感器,并在method中使用 了该方法,以便在文本视图中显示加速度计值。 如何添加更多传感器并以相同方式显示其值?我说什么时候程序将如何知道我指的是哪个传感器? 谢谢您的任何提前帮助,Maja 问题答案: 您将需要使用event.sensor.getType()方法检查传感器值是否属于该类型的

  • 本文向大家介绍Android编程之短信窃听器实现方法,包括了Android编程之短信窃听器实现方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Android编程之短信窃听器实现方法。分享给大家供大家参考,具体如下: 服务器: 1、修改frombean:VideoForm中增加短信时间、内容和发送者属性。 2、VideoManageAction中增加方法getSMS()来获取窃听器发送的

  • 我做了一个简单的加速度计应用程序,我想做一个配套的小部件。但是每次向widgetprovider添加传感器时,都会出现以下错误: 07-25 10:31:01.337:E/AndroidRuntime(8908):致命异常:main 07-25 10:31:01.337:E/AndroidRuntime(8908):java.lang.RuntimeException:无法启动接收器com.exa

  • 本文向大家介绍Android编程之菜单实现方法,包括了Android编程之菜单实现方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Android编程之菜单实现方法。分享给大家供大家参考,具体如下: 菜单是许多应用程序不可或缺的一部分,Android中更是如此,所有搭载Android系统的手机都要有一个“menu”键,即菜单键,由此可见菜单在Android程序中的重要与特殊,其中Andr