基本信息
源码名称:android 指南针app源码(亲测可用)
源码大小:3.96M
文件格式:.rar
开发语言:Java
更新时间:2019-12-26
   友情提示:(无需注册或充值,赞助后即可获取资源下载链接)

     嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300

本次赞助数额为: 2 元 
   源码介绍

package cn.icast.zhinanzhen;

import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Matrix;
import android.graphics.Paint;
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 MainActivity extends Activity {

	/**获取传感器管理类*/
	private SensorManager sensorManager;
	
	/**最新方向值*/
	private float degrees;
	/**上一次方向值*/
	private float lastdegress;
	
 SensorEventListener sensorEventListener = 	new SensorEventListener() {
	/**加速度传感器获取的值*/	
	 float[] acceleValues = new float[3];
	 /**地磁传感器获取的值*/
	 float[] magneticValues = new float[3];
	 
		@Override
		public void onSensorChanged(SensorEvent event) {
			//判断当前传感器是否是加速度传感器
			if(event.sensor.getType() == Sensor.TYPE_ACCELEROMETER){
				 //赋值时需要调用clone()方法
			     acceleValues = event.values.clone();
			}else if(event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD){
				magneticValues = event.values.clone();
			}
			float[] values = new float[3];
			float[] R = new float[9];
			SensorManager.getRotationMatrix(R, null, acceleValues, magneticValues);
			SensorManager.getOrientation(R, values);
			degrees = -(float)Math.toDegrees(values[0]);
			updateImgv();
		}
		
		@Override
		public void onAccuracyChanged(Sensor sensor, int accuracy) {
			
		}
	};

/**指南针出示图片*/
private Bitmap bitmap;

/**指南针图片*/
private ImageView mCompassImgv;

/**临摹一张与指南针图片设置一模一样的空白图片*/
private Bitmap createBitmap;

/**地磁传感器*/
private Sensor masensor;
/**加速度传感器*/
private Sensor accesensor;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
		masensor = sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
		accesensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
		//注册方向传感器
		sensorManager.registerListener(sensorEventListener, masensor, SensorManager.SENSOR_DELAY_GAME);
		sensorManager.registerListener(sensorEventListener, accesensor,SensorManager.SENSOR_DELAY_GAME);
		initView();
	}
	
	/**初始化控件*/
	private void initView() {
		bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.compass);
		mCompassImgv = (ImageView) findViewById(R.id.imgv_compass);
		mCompassImgv.setImageBitmap(bitmap);
	}

	
	/**更新图片位置*/
	private void updateImgv(){
		RotateAnimation animation = new RotateAnimation(lastdegress, degrees,Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
		animation.setDuration(200);
		animation.setFillAfter(true);
		mCompassImgv.startAnimation(animation);
		lastdegress = degrees;
	}
	
	@Override
	protected void onDestroy() {
		super.onDestroy();
		sensorManager.unregisterListener(sensorEventListener);
	}
}