本次我们学习Android传感器的开发,前面已经介绍过了,tween的使用,所以,我们可以结合传感器与tween动画,开发简易的指南针。

首先先介绍一下传感器的相关知识,

在Android应用程序中使用传感器要依赖于android.hardware.SensorEventListener接口。通过该接口可以监听传感器的各种事件。SensorEventListener接口的代码如下:

1
2
3
4
5
6
7
8
package android.hardware;
public interface SensorEventListener
{
     public void onSensorChanged(SensorEvent event);
     public void onAccuracyChanged(Sensor sensor, int accuracy);   
}

        在SensorEventListener接口中定义了两个方法:onSensorChanged和onAccuracyChanged。当传感器的值发生变化时onSensorChanged。当传感器的精度变化时会调用onAccuracyChanged方法。
      onSensorChanged方法只有一个SensorEvent类型的参数event,其中SensorEvent类有一个values变量非常重要,该变量的类型是float[]。但该变量最多只有3个元素,而且根据传感器的不同,values变量中元素所代表的含义也不同。
我们以方向传感器为例来说明value的含义:
      values[0]:该值表示方位,也就是手机绕着Z轴旋转的角度。0表示北(North);90表示东(East);180表示南(South);270表示西(West)。
      values[1]:该值表示倾斜度,或手机翘起的程度。当手机绕着X轴倾斜时该值发生变化。values[1]的取值范围是-180≤values[1]<180
   values[2]:表示手机沿着Y轴的滚动角度。取值范围是-90≤values[2]≤90。
下面我们结合实例说明使用情况,
布局文件:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<ImageView
       android:id="@+id/iv"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:src="@drawable/point" />
   <TextView
       android:layout_width="fill_parent"
       android:layout_height="wrap_content"
       android:textSize="50dp" />
   <TextView
       android:id="@+id/tv"
       android:layout_width="fill_parent"
       android:layout_height="wrap_content"
       android:textSize="20dp" />

其中的图片是在百度中随便找的一个方位的图片,

  

然后是activity中的实现:
  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
@Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);
       iv = (ImageView) findViewById(R.id.iv);
       tv = (TextView) findViewById(R.id.tv);
        
       sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
       //得到方向传感器  光传感器Sensor.TYPE_LIGHT value[0],代表光线强弱
       Sensor sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION);
        
       listener = new MyListener();
       sensorManager.registerListener(listener, sensor, SensorManager.SENSOR_DELAY_GAME);
   }
   private class MyListener implements SensorEventListener{
       float startangle = 0;
       //传感器数据变化时,
       @Override
       public void onSensorChanged(SensorEvent event) {
           // TODO Auto-generated method stub
           float[] values = event.values;
           float angle = values[0];
           System.out.println("与正北的角度:"+angle);
           RotateAnimation ra = new RotateAnimation(startangle, angle,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);
           ra.setDuration(100);
           iv.startAnimation(ra);
           tv.setText("与正北方向的角度是:"+angle);
           tv.setTextColor(Color.BLACK);
           startangle = -angle;
       }
       //传感器精确度变化的时候
       @Override
       public void onAccuracyChanged(Sensor sensor, int accuracy) {
           // TODO Auto-generated method stub
            
       }
        
   }
   @Override
   protected void onDestroy() {
       // 防止程序在后台运行,消耗内存,在程序退出时,释放资源。
       sensorManager.unregisterListener(listener);
       sensorManager = null;
       super.onDestroy();
        
   }

最后当我们手机的方向发生变化时,图片也在移动,同时下面的文本框,会显示相应的方位值。

  

Android学习笔记-传感器开发之利用传感器和Tween开发简易指南针相关推荐

  1. Pro Android学习笔记(一五五) 传感器(5) 磁场传感器和方位(上)

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 文章转载 ...

  2. Android学习笔记之(一)开发环境搭建

    Android学习笔记之(一)开发环境搭建 zouxy09@qq.com http://blog.csdn.net/zouxy09 至于说Android是什么之类的俺就不啰嗦了,因为它离我们太近了.直 ...

  3. Pro Android学习笔记(二九):用户界面和控制(17):include和merge

    xml控件代码重用:include 如果我们定义一个控件,需要在不同的layout中重复使用,或者在同一个layout中重复使用,可以采用include的方式.例如定义my_button.xml如下 ...

  4. 【转】 Pro Android学习笔记(二九):用户界面和控制(17):include和merge

    目录(?)[-] xml控件代码重用include xml控件代码重用merge 横屏和竖屏landsacpe portrait xml控件代码重用:include 如果我们定义一个控件,需要在不同的 ...

  5. Android学习笔记21:ImageView获取网络图片

    Android平台有3种网络接口可以使用,它们分别是:java.net.*(标准java接口).org.apache(Apache接口)和android.net.*(Android网络接口).本文将使 ...

  6. Android学习笔记:Android基础知识点(不断更新中)

    1.Android学习笔记:OkHttp 2.Android学习笔记:更新UI的方法(UI线程和非UI线程) 3.Android学习笔记:Volley 4.Android学习笔记:Handler 5. ...

  7. Pro Android学习笔记(七七):服务(2):Local Service

    文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn.net/flowingflying/ Local Service的目的是更容易实 ...

  8. android jackson xml,[Android学习笔记]jackson库的使用

    Jackson库一般用于序列化和反序列化操作,通常会涉及到的操作是: 1. Java Object -> Json String 2. Java Object -> Xml String ...

  9. Android学习笔记(七):多个Activity和Intent

    根据www.mars-droid.com:Andriod开发视频教学,先跳过书本<Beginning Android 2>的几个章,我是这两个资源一起看,需要进行一下同步.先初步了解一下应 ...

  10. Android学习笔记:TabHost 和 FragmentTabHost

    2019独角兽企业重金招聘Python工程师标准>>> Android学习笔记:TabHost 和 FragmentTabHostTabHost命名空间:android.widget ...

最新文章

  1. C++访问属性和继承属性浅析
  2. apollo local 模式_Java客户端使用指南 - 五、本地开发模式 - 《携程 Apollo v1.4 开发指南》 - 书栈网 · BookStack...
  3. html5app微信登陆,基于h5+的微信登陆,hbuilder打包
  4. python写入文件中文乱码_记一次python写入txt文件正常,但是写入csv文件中文乱码问题...
  5. JVM内存管理------JAVA语言的内存管理概述
  6. 天池 在线编程 最大得分(DP)
  7. 太多产品人死于汇报!
  8. Vue 学习笔记 — css属性计算的问题
  9. LINQ to XML 编程基础
  10. C++调用Go方法的字符串传递问题及解决方案
  11. java操作redis并发_使用Redis incr解决并发问题的操作
  12. 如何同时让多台服务器安装系统,如何同时安装多台服务器?
  13. JavaScript中用var和不用var的区别
  14. 放之四海皆适用的设计原则(一)
  15. 网络攻防第七周作业之20189304李小涛
  16. jquery+thinkphp实现跨域抓取数据的方法
  17. linux中nmap命令,Linux中nmap命令起什么作用呢?
  18. 中控指纹仪linux驱动下载,中控zk4500指纹采集器驱动下载_中控zk4500指纹采集器驱动官方下载-太平洋下载中心...
  19. 搜索及代码在GitHub上查重小技巧
  20. 如何在Pidgin中为您的域帐户设置Google Talk

热门文章

  1. css画不同角度空心箭头,css – 图像前面的空心箭头
  2. vs mysql 开发erp_ERP/MIS开发 Mindscape NHibernate + MySQL 快速开发入门
  3. 如何在unity使用数据库
  4. 安卓手机变Linux服务器丨AidLux上手体验
  5. 希尔贝壳参展世界人工智能大会 | WAIC 2021
  6. excel 简单制作数据透视表
  7. NR PDCP duplication
  8. 信息学奥赛一本通1189:Pell数列 OpenJudge1788:Pell数列
  9. 运算放大电路(比例运算电路)
  10. Docker容器之间相互访问