android指南针校准 代码_Android指南针小程序源代码

本文详细介绍了如何在Android平台上开发一款指南针应用,包括CompassView类的实现,利用SensorManager获取传感器数据,以及屏幕方向的判断。通过示例代码展示了如何处理SensorEvent,进行指南针的角度计算和屏幕绘制。同时提到了屏幕应水平放置以确保最佳使用体验。
摘要由CSDN通过智能技术生成

) {

// TODO Auto-generated method stub

super.onStop();

}

}

----------------------CompassView.java-----------------------------------

package widebright.tool;

import android.content.Context;

import android.graphics.Bitmap;

import android.graphics.BitmapFactory;

import android.graphics.Canvas;

import android.graphics.Color;

import android.graphics.Paint;

import android.hardware.Sensor;

import android.hardware.SensorEvent;

import android.hardware.SensorEventListener;

import android.hardware.SensorManager;

import android.view.Surface;

import android.view.SurfaceHolder;

import android.view.SurfaceView;

public class CompassView extends SurfaceView implements SurfaceHolder.Callback,

SensorEventListener {

SurfaceHolder mholder;

Bitmap background1;

SensorManager sensorManager;

Sensor orieSensor;

int screenWidth =0;

int screenHeight =0;

float degree = 0;

private static final Object LOCK = new Object();

public CompassView(Context context, int screenWidth, int screenHeight) {

super(context);

background1 = BitmapFactory.decodeResource(this.getResources(),

R.drawable.back1);

getHolder().addCallback(this);

this.screenWidth = screenWidth; // this.getWidth();

this.screenHeight = screenHeight; // this.getHeight();

sensorManager = (SensorManager) context

.getSystemService(Context.SENSOR_SERVICE);

orieSensor = sensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION);

if (orieSensor != null) {

sensorManager.registerListener(this, orieSensor,

SensorManager.SENSOR_DELAY_NORMAL);

}

}

@Override

public void surfaceChanged(SurfaceHolder holder, int format, int width,

int height) {

}

@Override

public void surfaceCreated(SurfaceHolder holder) {

synchronized (LOCK) {

mholder = holder;

}

// PaintThread thread= new PaintThread();

// thread.start();

}

@Override

public void surfaceDestroyed(SurfaceHolder holder) {

synchronized (LOCK) {

mholder = null;

}

}

public void removeSensorListener() {

sensorManager.unregisterListener(this);

}

// class PaintThread extends Thread{

// public void run() {

//

// }

// }

@Override

public void onAccuracyChanged(Sensor sensor, int accuracy) {

}

@Override

public void onSensorChanged(SensorEvent event) {

// event.timestamp The time in nanosecond at which the event

// happened

if (Math.abs(event.values[1]) &gt 32 || // 围绕x轴的偏转(-180 to 180)

Math.abs(event.values[2]) &gt 20) { // 围绕y轴的偏转 (-90 to 90),

// event.values[0] Azimuth, angle between the magnetic north

// direction and the Y axis, around the Z axis (0 to 359). 0=North,

// 90=East, 180=South, 270=West

synchronized (LOCK) {

if (mholder != null) {

Canvas can = mholder.lockCanvas();

if (can == null)

return;

can.drawRGB(0, 0, 0);

Paint paint = new Paint();

paint.setFlags(Paint.ANTI_ALIAS_FLAG);

paint.setColor(Color.GREEN);

can.drawText("我的指南针 by widebright", 20, 20, paint);

can.drawText("你的屏幕要水平放置!", 20,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值