鱼C论坛

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

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

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

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

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

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


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

    <ImageView
        android:id="@+id/south"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" 
        android:src="@drawable/compass"
        />   
</LinearLayout>
2.activity程序功能的实现:
package com.example.compass_test;

import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.view.Menu;
import android.view.animation.Animation;
import android.view.animation.RotateAnimation;
import android.widget.ImageView;

public class MainActivity extends Activity {

        private ImageView iv;
        private SensorManager sensorManager;
        private Sensor sensor;
        private MySensorEventListener listener;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
                this.iv = (ImageView) this.findViewById(R.id.south);
                this.iv.setKeepScreenOn(true);  //保持屏幕的高亮
        }

        @Override
        protected void onResume() {
                // TODO Auto-generated method stub
                
                listener = new MySensorEventListener();
                //获取传感器的管理者
                sensorManager = (SensorManager) this.getSystemService(Context.SENSOR_SERVICE);
                //方向传感器
                sensor = this.sensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION);
                //注册监听
                sensorManager.registerListener(listener, sensor,SensorManager.SENSOR_DELAY_GAME);
                super.onResume();
        }

        private class MySensorEventListener implements SensorEventListener
        {

                float predergee = 0;
                //当传感器的精度变化时
                
                @Override
                public void onAccuracyChanged(Sensor arg0, int arg1) {
                        // TODO Auto-generated method stub
                        
                }
                //当传感器发生改变的时候
                @Override
                public void onSensorChanged(SensorEvent event) {
                        // TODO Auto-generated method stub
                        float[] values = event.values;
                        float degree = values[0];  //表示正北方向夹角的度数
                        System.out.println("与长辈方向的夹角: " + degree);
                        /**
                         * RotateAnimation 是旋转动画:
                         * 参数:
                         * predergee:旋转的开始角度
                         * -degree:旋转的结束角度
                         * Animation.RELATIVE_TO_SELF  X轴的伸缩模式
                         * 0.5f  X轴的伸缩值
                         * Animation.RELATIVE_TO_SELF  Y轴的伸缩模式
                         * 0.5f  Y轴的伸缩值
                         */
                        RotateAnimation rotateAnimation = new RotateAnimation(predergee,
                                        -degree,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);
                        rotateAnimation.setDuration(200);  //设置动画的持续时间 
                        iv.startAnimation(rotateAnimation);  //开始时间
                        predergee = -degree;
                }
        }
        @Override
        protected void onStop() {
                // TODO Auto-generated method stub
                sensorManager.unregisterListener(listener);
                super.onStop();
        }
}
QQ截图20141122181944.png



本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-11-22 18:45:22 | 显示全部楼层
大大这是什么语言????
Java????
好腻害的说
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

恩恩! 是安卓应用程序开发!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

不会Java哎
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

不会可以学嘛!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

不会可以学嘛!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

目前学c   ,发现c得学的东西好多
人太笨  学c感到困难
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

呵呵! 看来老兄刚学编程不久,别急,慢慢来!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

额额
小菜鸟一个,正在学习中
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-15 16:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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