600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > Android方向传感器

Android方向传感器

时间:2022-09-22 04:31:56

相关推荐

Android方向传感器

/*** 传感器指针Demo* * @description:* @author ldm* @date -4-25 下午5:29:18*/public class SensorHandActivity extends GraphicsActivity {// 传感器管理对象private SensorManager mSensorManager;// 传感器类private Sensor mSensor;// 自定义绘制指针Viewprivate MyCompassView mView;/*** 方向传感器检测到的感应值 values[0]: Azimuth(方位),地磁北方向与y轴的角度,围绕z轴旋转(0到359)。0=North,* 90=East, 180=South, 270=West values[1]: Pitch(俯仰),围绕X轴旋转(-180 to 180),* 当Z轴向Y轴运动时是正值 values[2]: Roll(滚),围绕Y轴旋转(-90 to 90),当X轴向Z轴运动时是正值*/private float[] mValues;// 传感监听private final SensorEventListener mSensorListener = new SensorEventListener() {public void onSensorChanged(SensorEvent event) {mValues = event.values;if (mView != null) {mView.invalidate();}}public void onAccuracyChanged(Sensor sensor, int accuracy) {}};@SuppressWarnings("deprecation")@Overrideprotected void onCreate(Bundle icicle) {super.onCreate(icicle);mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION);mView = new MyCompassView(this);setContentView(mView);}@Overrideprotected void onResume() {super.onResume();/*** 在onResume方法中注册传感器监听 事件* 第一个参数:监听Sensor事件,第二个参数是Sensor目标种类的值,第三个参数是延迟时间的精度密度。延迟时间的精密度参数 参数* 延迟时间 SensorManager.SENSOR_DELAY_FASTEST 0ms* SensorManager.SENSOR_DELAY_GAME 20ms SensorManager.SENSOR_DELAY_UI* 60ms SensorManager.SENSOR_DELAY_NORMAL 200ms*/mSensorManager.registerListener(mSensorListener, mSensor,SensorManager.SENSOR_DELAY_GAME);}@Overrideprotected void onStop() {// 在onStop方法中取消注册监听mSensorManager.unregisterListener(mSensorListener);super.onStop();}private class MyCompassView extends View {// 定义画笔Paintprivate Paint mPaint;// 定义绘制指针的路径Pathprivate Path mPath;public MyCompassView(Context context) {super(context);initPaintAndPath();}private void initPaintAndPath() {// 初始化画笔mPaint = new Paint();mPaint.setAntiAlias(true);mPaint.setColor(Color.BLACK);mPaint.setStyle(Paint.Style.FILL);// 初始化绘制路径mPath = new Path();mPath.moveTo(0, -50);// 移动到指点点mPath.lineTo(-20, 60);// 用线条连接到指定点mPath.lineTo(0, 50);mPath.lineTo(20, 60);mPath.close();// 关闭路径}@Overrideprotected void onDraw(Canvas canvas) {// 设置画面背景canvas.drawColor(Color.WHITE);int w = canvas.getWidth();int h = canvas.getHeight();int cx = w / 2;int cy = h / 2;canvas.translate(cx, cy);// 移动画面,把指针放到中央if (mValues != null) {canvas.rotate(-mValues[0]);}canvas.drawPath(mPath, mPaint);}}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。