) {
// 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]) > 32 || // 围绕x轴的偏转(-180 to 180)
Math.abs(event.values[2]) > 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,