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

本文介绍了如何在Android中使用SensorManager监听设备的传感器数据,特别是TYPE_ORIENTATION类型,实现实时的罗盘指示。通过SensorEventListener接口,获取并处理orientation数据,用RotateAnimation动画更新ImageView方向。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package com.example.activity;

import android.app.Activity;

import android.hardware.Sensor;

import android.hardware.SensorEvent;

import android.hardware.SensorEventListener;

import android.hardware.SensorManager;

import android.os.Bundle;

import android.view.animation.Animation;

import android.view.animation.RotateAnimation;

import android.widget.ImageView;

public class CompassDemo extends Activity implements SensorEventListener {

private ImageView imageView;

SensorManager mSensorManager;

private float currentDegree=0f;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.compass);

imageView=(ImageView)findViewById(R.id.znzImage);

mSensorManager=(SensorManager)getSystemService(SENSOR_SERVICE);

}

@Override

protected void onResume() {

mSensorManager.registerListener(this,mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION), SensorManager.SENSOR_DELAY_GAME);

super.onResume();

}

@Override

protected void onPause() {

mSensorManager.unregisterListener(this);

super.onPause();

}

@Override

protected void onStop() {

mSensorManager.unregisterListener(this);

super.onStop();

}

@Override

public void onAccuracyChanged(Sensor arg0, int arg1) {

}

@Override

public void onSensorChanged(SensorEvent event) {

int sensortype=event.sensor.getType();

switch(sensortype){

case Sensor.TYPE_ORIENTATION:

float degree=event.values[0];

RotateAnimation ra=new RotateAnimation(currentDegree,-degree,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);

ra.setDuration(200);

imageView.startAnimation(ra);

currentDegree=-degree;

break;

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值