使用传感器的关键点: 创建传感器管理器: private SensorManager mSensorManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE); 创建一个传感器:Sensor mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION); 然后创建一个传感器事件监听器: private final SensorEventListener mListener = new SensorEventListener() 该传感器监听器有两个方法:public void onSensorChanged(SensorEvent event) public void onAccuracyChanged(Sensor sensor, int accuracy) 然后注册传感器侦听回调函数:mSensorManager.registerListener(mListener, mSensor, SensorManager.SENSOR_DELAY_GAME); 最后销毁传感器回调函数: mSensorManager.unregisterListener(mListener);
package com.example.compass; import android.app.Activity; import android.content.Context; import android.graphics.*; import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.hardware.SensorManager; import android.os.Bundle; import android.util.Config; import android.util.Log; import android.view.View; public class Compass extends Activity { private static final String TAG = "Compass"; private SensorManager mSensorManager;//传感器管理器 private Sensor mSensor; //传感器 private SampleView mView;// view private float[] mValues; private final SensorEventListener mListener = new SensorEventListener() { public void onSensorChanged(SensorEvent event) { if (Config.DEBUG) Log.d(TAG, "sensorChanged (" + event.values[0] + ", " + event.values[1] + ", " + event.values[2] + ")"); mValues = event.values; if (mView != null) { mView.invalidate(); } } public void onAccuracyChanged(Sensor sensor, int accuracy) { } }; @Override protected void onCreate(Bundle icicle) { super.onCreate(icicle); mSensorManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE); mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION); mView = new SampleView(this); setContentView(mView); } @Override protected void onResume() { if (Config.DEBUG) Log.d(TAG, "onResume"); super.onResume(); mSensorManager.registerListener(mListener, mSensor, SensorManager.SENSOR_DELAY_GAME); } @Override protected void onStop() { if (Config.DEBUG) Log.d(TAG, "onStop"); mSensorManager.unregisterListener(mListener); super.onStop(); } private class SampleView extends View { private Paint mPaint = new Paint(); private Path mPath = new Path(); private boolean mAnimate; public SampleView(Context context) { super(context); // Construct a wedge-shaped path,设置指南针轮廓 mPath.moveTo(0, -50); mPath.lineTo(-20, 80); mPath.lineTo(0, 50); mPath.lineTo(20, 80); mPath.close(); } @Override protected void onDraw(Canvas canvas) { Paint paint = mPaint; canvas.drawColor(Color.WHITE);//设置canvas背景颜色 paint.setAntiAlias(true);//设置抗锯齿 paint.setColor(Color.BLACK);//设置paint的颜色 paint.setStyle(Paint.Style.STROKE);//设置填充方式 int w = canvas.getWidth(); int h = canvas.getHeight(); int cx = w / 2; int cy = h / 2; canvas.translate(cx, cy);//canvas平移到屏幕中间 if (mValues != null) { canvas.rotate(-mValues[0]); } canvas.drawPath(mPath, mPaint); } @Override protected void onAttachedToWindow() { mAnimate = true; if (Config.DEBUG) Log.d(TAG, "onAttachedToWindow. mAnimate=" + mAnimate); super.onAttachedToWindow(); } @Override protected void onDetachedFromWindow() { mAnimate = false; if (Config.DEBUG) Log.d(TAG, "onDetachedFromWindow. mAnimate=" + mAnimate); super.onDetachedFromWindow(); } } }
android compass
最新推荐文章于 2022-09-06 22:57:49 发布