基本信息
源码名称:android 指南针app源码(亲测可用)
源码大小:3.96M
文件格式:.rar
开发语言:Java
更新时间:2019-12-26
友情提示:(无需注册或充值,赞助后即可获取资源下载链接)
嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300
本次赞助数额为: 2 元×
微信扫码支付:2 元
×
请留下您的邮箱,我们将在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); } }