欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

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

程序员文章站 2023-12-02 19:24:10
本文实例讲述了android编程之方向传感器用法。分享给大家供大家参考,具体如下: /** * 传感器指针demo * * @description:...

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