Android方向传感器

  

传感器中的X:如上图所示,规定X正半轴为北,手机头部指向OF方向,此时X的值为0,如果手机头部指向OG方向,此时X值为90,指向OH方向,X值为180,指向OE,X值为270传感器中的Y:现在我们将手机沿着BC轴慢慢向上抬起,即手机头部不动,尾部慢慢向上翘起来,直到AD跑到BC右边并落在XOY平面上,Y的值将从0~180之间变动,如果手机沿着AD轴慢慢向上抬起,即手机尾部不懂,直到BC跑到AD左边并且落在XOY平面上,Y的值将从0~-180之间变动,这就是方向传感器中Y的含义。传感器中的Z:现在我们将手机沿着AB轴慢慢向上抬起,即手机左边框不动,右边框慢慢向上翘起来,直到CD跑到AB右边并落在XOY平面上,Z的值将从0~180之间变动,如果手机沿着CD轴慢慢向上抬起,即手机右边框不动,直到AB跑到CD左边并且落在XOY平面上,Z的值将从0~-180之间变动,这就是方向传感器中发Z的含义。了解了方向传感器中X,Y,Z的含义之后下面我们就开始学习如何使用
首先我们创建一个传感器管理器和一个传感器监听器,管理器用来管理传感器以及创建各种各样的传感器,监听器用来监视传感器的变化并且进行相应的操作
private SensorManager sensorManager;
private MySensorEventListener mySensorEventListener;
mySensorEventListener= new MySensorEventListener();//这个监听器当然是我们自己定义的,在方向感应器感应到手机方向有变化的时候,我们可以采取相应的操作,这里紧紧是将x,y,z的值打印出来
private final class MySensorEventListener implements  SensorEventListener{@Override
//可以得到传感器实时测量出来的变化值
public void onSensorChanged(SensorEvent event) {
//方向传感器
if(event.sensor.getType()==Sensor.TYPE_ORIENTATION){
//x表示手机指向的方位,0表示北,90表示东,180表示南,270表示西
float x = event.values[SensorManager.DATA_X];
float y = event.values[SensorManager.DATA_Y];
float z = event.values[SensorManager.DATA_Z];
//tv_orientation是界面上的一个TextView标签,不再赘述
tv_orientation.setText("Orientation:"+x+","+y+","+z);
}
}我们在onResume方法中创建一个方向传感器,并向系统注册监听器
protected void onResume() {Sensor sensor_orientation=sensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION);sensorManager.registerListener(mySensorEventListener,sensor_orientation, SensorManager.SENSOR_DELAY_UI);
super.onResume();
}
最后我们在onPause()中注销所有传感器的监听,释放方向感应器资源!
protected void onPause() {
//注销所有传感器的监听
sensorManager.unregisterListener(mySensorEventListener);
super.onPause();
}
到此,有关方向传感器的介绍完毕!

Android:方向传感器

感谢东风破的博客:传送门

利用Android传感器传回来第一个参数值就是代表手机绕z轴旋转在角度,可以通过Android本身传感器开发出指南针

运行截图:

程序结构

package com.example.administrator.myapplication;import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.hardware.Sensor;
import android.hardware.SensorListener;
import android.hardware.SensorManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Config;
import android.util.Log;
import android.view.View;import java.util.List;public class MainActivity extends AppCompatActivity {private static final String TAG ="指南针";private SensorManager mSensorManager;private SampleView mView;private float[] mValues;private final SensorListener mListener = new SensorListener() {@Overridepublic void onSensorChanged(int i, float[] floats) {if(Config.DEBUG)Log.d("TAG","sensorChanged("+floats[0]+","+floats[1]+","+floats[2]+")");mValues = floats;if(mView!=null){mView.invalidate();}}@Overridepublic void onAccuracyChanged(int i, int i1) {}};protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);mSensorManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE);List<Sensor>sensors = mSensorManager.getSensorList(Sensor.TYPE_ALL);mView = new SampleView(this);setContentView(mView);}@Overrideprotected void onResume(){super.onResume();mSensorManager.registerListener(mListener,SensorManager.SENSOR_ORIENTATION,SensorManager.SENSOR_DELAY_GAME);}@Overrideprotected void onStop(){mSensorManager.unregisterListener(mListener);super.onStop();}private class SampleView extends View{private Paint mPaint = new Paint();private Path mPath = new Path();private boolean mAnimate;private long mNextTime;public SampleView(Context context){super(context);mPath.lineTo(-20,60);mPath.lineTo(0,50);mPath.lineTo(20,60);mPath.close();}protected void onDraw(Canvas canvas){Paint paint = mPaint;canvas.drawColor(Color.WHITE);paint.setAntiAlias(true);paint.setColor(Color.BLUE);paint.setStyle(Paint.Style.FILL);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);}@Overrideprotected void onAttachedToWindow(){mAnimate = true;super.onAttachedToWindow();}protected void onDetachedFromWindow(){mAnimate = false;super.onDetachedFromWindow();}}}

MainActivity

一、方位传感器

注册注册方位角传感器,获取其中的极方位角方(mValues)

    private final SensorListener mListener = new SensorListener() {@Overridepublic void onSensorChanged(int i, float[] floats) {mValues = floats;if(mView!=null){mView.invalidate();}}@Overridepublic void onAccuracyChanged(int i, int i1) {}};

二、指南针

1、绘制指南针

      public SampleView(Context context){super(context);mPath.lineTo(-20,60);mPath.lineTo(0,50);mPath.lineTo(20,60);mPath.close();}

canvas.translate(cx,cy)方法

  平移,将画布的坐标原点向左右方向移动cx,向上下方向移动cy.canvas的默认位置是在(0,0).

2、调整指南针方向

每当方位角度栽移动时,通过控制整个话不反方向移动同样在角度,来实现看起来椒整个指南针都在移动

canvas.rotate(x)方法

  旋转角度,以弧度计

   private class SampleView extends View{private Paint mPaint = new Paint();private Path mPath = new Path();private boolean mAnimate;private long mNextTime;public SampleView(Context context){super(context);mPath.lineTo(-20,60);mPath.lineTo(0,50);mPath.lineTo(20,60);mPath.close();}protected void onDraw(Canvas canvas){Paint paint = mPaint;canvas.drawColor(Color.WHITE);paint.setAntiAlias(true);paint.setColor(Color.BLUE);paint.setStyle(Paint.Style.FILL);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);}@Overrideprotected void onAttachedToWindow(){mAnimate = true;super.onAttachedToWindow();}protected void onDetachedFromWindow(){mAnimate = false;super.onDetachedFromWindow();}}

转载于:https://www.cnblogs.com/1138720556Gary/p/9333155.html

Android_(传感器)指南针相关推荐

  1. Android_传感器光学

    上一篇写了一个小案例方向传感器,与这光学传感器原理大致类似,但其实代码的主要区别得到的类型不一样在这里我一一列举出来: * Sensor.TYPE_ORIENTATION:方向传感器.  * Sens ...

  2. Android_(传感器)获取手机中的传感器

    传感器是一种检测装置,能够感受被测量的信息,并能将检测和感受到的信息按一定规律变换成电信号或其它所需形式的信息输出 Android操作系统中内置了很多的传感器(物理装置),能够探测.感受外界的信号.物 ...

  3. 【黑马Android】(11)音乐播放器/视频播放器/照相机/常见对话框/notification通知/样式和主题/帧动画/传感器/应用程序反编译与安装

    音乐播放器api <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns: ...

  4. Android 利用方向传感器实现 指南针

    step1:新建一个项目Compass,并将一张指南针图片导入到res/drawable-hdpi目录中 step2:设计应用的UI界面,main.xml <?xml version=" ...

  5. Android 利用方向传感器实现 指南针

    step1:新建一个项目Compass,并将一张指南针图片导入到res/drawable-hdpi目录中 step2:设计应用的UI界面,main.xml <?xml version=" ...

  6. android 指南针传感器,android 传感器使用 Compass指南针的实现功能

    以下是指南针通过方向传感器而旋转实现. CompassDemo.java: package com.example.activity;import android.app.Activity;impor ...

  7. Android 电子罗盘 --指南针(方向传感器的应用)

    ,图片神马的在网上搜个指南针图片就好了,本来没有注释,发上来之后感觉不行,还是加上吧,方便学习 main.xml <?xml version="1.0" encoding=& ...

  8. Android学习-指南针(方向传感器)

    Android学习-指南针 效果图(背景图片网上随便找的): 1.编写布局文件activity_main.xml文件 主要放一个东南西北方向图片,一个指针图片用来指明方向 <?xml versi ...

  9. Android学习笔记-传感器开发之利用传感器和Tween开发简易指南针

    本次我们学习Android传感器的开发,前面已经介绍过了,tween的使用,所以,我们可以结合传感器与tween动画,开发简易的指南针. 首先先介绍一下传感器的相关知识, 在Android应用程序中使 ...

最新文章

  1. python方法和函数的格式是完全一样的_Python成为专业人士笔记-返回变量形式函数- str() 和 repr()...
  2. wgs84坐标格式转换度分秒_一起爬山吗?寻找GIS坐标系统中“隐秘的角落”
  3. oracle library cache lock,【DB】彻底搞清楚library cache lock的成因和解决方法(一)
  4. 极有收藏价值的一组难求纯4位数字.com域名 #8847#含义你懂的。 http://t.cn/ae9CTd
  5. fcn从头开始_如何使用Go从头开始构建区块链
  6. excel几个表合成一张_Excel中怎样把多张表格中的数据合并到一张表格中
  7. sqlite 无符号32_C语言的32个关键字
  8. Senparc.Weixin.MP.Sample 配置redis服务器密码
  9. 组态软件实现RFID设备数据采集
  10. android集成华为push 6003错误,以及华为低版本crash问题
  11. 如何使用格式工厂将vtt文件格式字幕加在视频文件中
  12. android studio jni.h 红色报错
  13. 如何将台式机的网络共享给另外一台台式机
  14. 博途软件中多重背景块的建立_TIA博途软件中创建多重背景函数块
  15. SpringBoot如何上传大文件
  16. 减字 浣溪沙-听歌有感 (清)况周颐
  17. ifconfig 发现RX dropped 数字比较大的理解
  18. 记一次阿里电话面试| 技术征文
  19. 电信资费管理系统 ssm框架写后台
  20. Ubuntu系统安装CUDA或NVIDIA驱动后出现循环登录问题的Solution (附:building kernel modules error)

热门文章

  1. [458]抓取微信公众号(一)
  2. 深入产品线的配置管理
  3. 40K成功入职:六年开发终获小米Offer(附面经+面试题+答案详解)
  4. 手机加上芯片可看免费电视 明年国内将上市(图)
  5. 爬虫-豆瓣top250,东方财富网动态数据
  6. python简历项目经验在哪里找_Linux运维工程师简历项目经验
  7. SSH远程访问以及控制
  8. 词嵌入、句向量等方法汇总
  9. python陆股通_要闻:11月“陆股通”渠道外资净买入A股579亿元
  10. Cameralink转VGA接口转换模块