鱼C论坛

 找回密码
 立即注册
查看: 2588|回复: 8

[原创]android学习之传感器--方向传感器

[复制链接]
发表于 2014-11-22 18:26:59 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
这里需要说明的是,如果手机上有支持方向传感器的硬件的话,应该可以,如果没有,此功能就不能实现:此功能基本上实现了一个指南针的效果


1.布局文件的配置:
  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2.     xmlns:tools="http://schemas.android.com/tools"
  3.     android:layout_width="match_parent"
  4.     android:layout_height="match_parent"
  5.     android:gravity="center"
  6.     tools:context=".MainActivity" >

  7.     <ImageView
  8.         android:id="@+id/south"
  9.         android:layout_width="wrap_content"
  10.         android:layout_height="wrap_content"
  11.         android:src="@drawable/compass"
  12.         />   
  13. </LinearLayout>
复制代码
2.activity程序功能的实现:
  1. package com.example.compass_test;

  2. import android.hardware.Sensor;
  3. import android.hardware.SensorEvent;
  4. import android.hardware.SensorEventListener;
  5. import android.hardware.SensorManager;
  6. import android.os.Bundle;
  7. import android.app.Activity;
  8. import android.content.Context;
  9. import android.view.Menu;
  10. import android.view.animation.Animation;
  11. import android.view.animation.RotateAnimation;
  12. import android.widget.ImageView;

  13. public class MainActivity extends Activity {

  14.         private ImageView iv;
  15.         private SensorManager sensorManager;
  16.         private Sensor sensor;
  17.         private MySensorEventListener listener;
  18.         @Override
  19.         protected void onCreate(Bundle savedInstanceState) {
  20.                 super.onCreate(savedInstanceState);
  21.                 setContentView(R.layout.activity_main);
  22.                 this.iv = (ImageView) this.findViewById(R.id.south);
  23.                 this.iv.setKeepScreenOn(true);  //保持屏幕的高亮
  24.         }

  25.         @Override
  26.         protected void onResume() {
  27.                 // TODO Auto-generated method stub
  28.                
  29.                 listener = new MySensorEventListener();
  30.                 //获取传感器的管理者
  31.                 sensorManager = (SensorManager) this.getSystemService(Context.SENSOR_SERVICE);
  32.                 //方向传感器
  33.                 sensor = this.sensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION);
  34.                 //注册监听
  35.                 sensorManager.registerListener(listener, sensor,SensorManager.SENSOR_DELAY_GAME);
  36.                 super.onResume();
  37.         }

  38.         private class MySensorEventListener implements SensorEventListener
  39.         {

  40.                 float predergee = 0;
  41.                 //当传感器的精度变化时
  42.                
  43.                 @Override
  44.                 public void onAccuracyChanged(Sensor arg0, int arg1) {
  45.                         // TODO Auto-generated method stub
  46.                        
  47.                 }
  48.                 //当传感器发生改变的时候
  49.                 @Override
  50.                 public void onSensorChanged(SensorEvent event) {
  51.                         // TODO Auto-generated method stub
  52.                         float[] values = event.values;
  53.                         float degree = values[0];  //表示正北方向夹角的度数
  54.                         System.out.println("与长辈方向的夹角: " + degree);
  55.                         /**
  56.                          * RotateAnimation 是旋转动画:
  57.                          * 参数:
  58.                          * predergee:旋转的开始角度
  59.                          * -degree:旋转的结束角度
  60.                          * Animation.RELATIVE_TO_SELF  X轴的伸缩模式
  61.                          * 0.5f  X轴的伸缩值
  62.                          * Animation.RELATIVE_TO_SELF  Y轴的伸缩模式
  63.                          * 0.5f  Y轴的伸缩值
  64.                          */
  65.                         RotateAnimation rotateAnimation = new RotateAnimation(predergee,
  66.                                         -degree,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);
  67.                         rotateAnimation.setDuration(200);  //设置动画的持续时间
  68.                         iv.startAnimation(rotateAnimation);  //开始时间
  69.                         predergee = -degree;
  70.                 }
  71.         }
  72.         @Override
  73.         protected void onStop() {
  74.                 // TODO Auto-generated method stub
  75.                 sensorManager.unregisterListener(listener);
  76.                 super.onStop();
  77.         }
  78. }











复制代码

QQ截图20141122181944.png



本帖被以下淘专辑推荐:

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-11-22 18:45:22 | 显示全部楼层
大大这是什么语言????
Java????
好腻害的说
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-11-22 19:04:45 | 显示全部楼层
小人 发表于 2014-11-22 18:45
大大这是什么语言????
Java????
好腻害的说

恩恩! 是安卓应用程序开发!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-11-22 20:10:47 | 显示全部楼层
青玄 发表于 2014-11-22 11:04
恩恩! 是安卓应用程序开发!

不会Java哎
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-11-22 20:40:03 | 显示全部楼层

不会可以学嘛!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-11-22 20:40:04 | 显示全部楼层

不会可以学嘛!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-11-22 20:57:13 | 显示全部楼层
青玄 发表于 2014-11-22 12:40
不会可以学嘛!

目前学c   ,发现c得学的东西好多
人太笨  学c感到困难
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-11-22 21:52:49 | 显示全部楼层
小人 发表于 2014-11-22 20:57
目前学c   ,发现c得学的东西好多
人太笨  学c感到困难

呵呵! 看来老兄刚学编程不久,别急,慢慢来!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-11-23 08:24:24 | 显示全部楼层
青玄 发表于 2014-11-22 13:52
呵呵! 看来老兄刚学编程不久,别急,慢慢来!

额额
小菜鸟一个,正在学习中
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-28 02:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表