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

所属分类: 软件编程 / Android 阅读数: 39
收藏 0 赞 0 分享

本文实例讲述了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程序设计有所帮助。

更多精彩内容其他人还在看

Android中加入名片扫描功能实例代码

这篇文章主要介绍了Android中加入名片扫描功能实例代码的相关资料,需要的朋友可以参考下
收藏 0 赞 0 分享

Android仿微信发表说说实现拍照、多图上传功能

这篇文章主要为大家详细介绍了Android仿微信发表说说实现拍照、多图上传功能,使用Retrofit2.0技术,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

设置Android系统永不锁屏永不休眠的方法

在进行Android系统开发的时候,有些特定的情况需要设置系统永不锁屏,永不休眠。本篇文章给大家介绍Android 永不锁屏,开机不锁屏,删除设置中休眠时间选项,需要的朋友一起学习吧
收藏 0 赞 0 分享

Android Retrofit 2.0框架上传图片解决方案

这篇文章主要介绍了Android Retrofit 2.0框架上传一张与多张图片解决方案,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Android自定义等待对话框

这篇文章主要为大家详细介绍了Android自定义等待对话框的实现方法,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Android中Window添加View的底层原理

这篇文章主要介绍了Android中Window添加View的底层原理,需要的朋友可以参考下
收藏 0 赞 0 分享

Android调用系统默认浏览器访问的方法

这篇文章主要介绍了Android调用系统默认浏览器访问的方法的相关资料,需要的朋友可以参考下
收藏 0 赞 0 分享

Android开发退出程序的方法汇总

Android程序有很多Activity,比如说主窗口A,调用了子窗口B,子窗口B又调用子窗口C,back返回子窗口B后,在B中如何关闭整个Android应用程序呢? 下面脚本之家小编就给大家介绍android开发退出程序的几种方法,感兴趣的朋友参考下吧
收藏 0 赞 0 分享

Android程序开发中单选按钮(RadioGroup)的使用详解

在android程序开发中,无论是单选按钮还是多选按钮都非常的常见,接下来通过本文给大家介绍Android程序开发中单选按钮(RadioGroup)的使用,需要的朋友参考下吧
收藏 0 赞 0 分享

Android实现仿网易今日头条等自定义频道listview 或者grideview等item上移到另一个view中

这篇文章主要介绍了Android实现仿网易今日头条等自定义频道listview 或者grideview等item上移到另一个view中 的相关资料,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多