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

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

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

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。
 
下面我们结合实例说明使用情况,
布局文件:
 <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中的实现:
  

 @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(); }

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

  

 
 
 
 

最新文章

  1. Javascript知识点记录(三)设计模式
  2. Objective-C基础数据类型-NSSet[转]
  3. 表达式拼接Expression&lt;Func&lt;IEntityMapper, bool&gt;&gt; predicate
  4. javascript判断文件大小
  5. sublime快捷键整理
  6. State of Hyperparameter Selection
  7. Csharp Winfrom 多串口通信
  8. 游戏基础元素——Cocos2d-x学习历程(八)
  9. 基本介绍LINUX远程PC软件:PUTTY、SecureCRT、X-Manager
  10. .NET平台的ORM分析工具
  11. JQ 上传文件(单个,多个,分片)
  12. Java for Android 第三周学习总结
  13. github pages + Hexo + node.js 搭建属于自己的个人博客网站
  14. ElasticSearch(1)---Mysql同步数据到ElSearch
  15. 分享:五个非常有用的WP插件
  16. Docker原理探究
  17. lucene删除索引——(五)
  18. leetCode题解之删除单链表中指定的元素
  19. BZOJ 3171 循环格 最小费用流
  20. 转】未指定 INSTANCESHAREDWOWDIR 命令行值。如果指定INSTANCESHAREDDIR 值,则必须指定该值 .

热门文章

  1. ubuntu 网卡配置
  2. CocoaPods 命令和使用
  3. phphstrom改变项目中文件排列方式
  4. jquery attr的属性
  5. [USACO12MAR] 摩天大楼里的奶牛 Cows in a Skyscraper
  6. pyton学习之路
  7. Texture 纹理贴图
  8. 九度oj 题目1052:找x
  9. POJ 2096 找bug 期望dp
  10. MVC Ajax.BeginForm重复提交解决方法