Android编程之方向传感器用法示例
本文实例讲述了Android编程之方向传感器用法。分享给大家供大家参考,具体如下:
/** *传感器指针Demo * *@description: *@authorldm *@date2016-4-25下午5:29:18 */ publicclassSensorHandActivityextendsGraphicsActivity{ //传感器管理对象 privateSensorManagermSensorManager; //传感器类 privateSensormSensor; //自定义绘制指针View privateMyCompassViewmView; /** *方向传感器检测到的感应值values[0]:Azimuth(方位),地磁北方向与y轴的角度,围绕z轴旋转(0到359)。0=North, *90=East,180=South,270=Westvalues[1]:Pitch(俯仰),围绕X轴旋转(-180to180), *当Z轴向Y轴运动时是正值values[2]:Roll(滚),围绕Y轴旋转(-90to90),当X轴向Z轴运动时是正值 */ privatefloat[]mValues; //传感监听 privatefinalSensorEventListenermSensorListener=newSensorEventListener(){ publicvoidonSensorChanged(SensorEventevent){ mValues=event.values; if(mView!=null){ mView.invalidate(); } } publicvoidonAccuracyChanged(Sensorsensor,intaccuracy){ } }; @SuppressWarnings("deprecation") @Override protectedvoidonCreate(Bundleicicle){ super.onCreate(icicle); mSensorManager=(SensorManager)getSystemService(Context.SENSOR_SERVICE); mSensor=mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION); mView=newMyCompassView(this); setContentView(mView); } @Override protectedvoidonResume(){ super.onResume(); /** *在onResume方法中注册传感器监听事件 *第一个参数:监听Sensor事件,第二个参数是Sensor目标种类的值,第三个参数是延迟时间的精度密度。延迟时间的精密度参数参数 *延迟时间SensorManager.SENSOR_DELAY_FASTEST0ms *SensorManager.SENSOR_DELAY_GAME20msSensorManager.SENSOR_DELAY_UI *60msSensorManager.SENSOR_DELAY_NORMAL200ms */ mSensorManager.registerListener(mSensorListener,mSensor, SensorManager.SENSOR_DELAY_GAME); } @Override protectedvoidonStop(){ //在onStop方法中取消注册监听 mSensorManager.unregisterListener(mSensorListener); super.onStop(); } privateclassMyCompassViewextendsView{ //定义画笔Paint privatePaintmPaint; //定义绘制指针的路径Path privatePathmPath; publicMyCompassView(Contextcontext){ super(context); initPaintAndPath(); } privatevoidinitPaintAndPath(){ //初始化画笔 mPaint=newPaint(); mPaint.setAntiAlias(true); mPaint.setColor(Color.BLACK); mPaint.setStyle(Paint.Style.FILL); //初始化绘制路径 mPath=newPath(); mPath.moveTo(0,-50);//移动到指点点 mPath.lineTo(-20,60);//用线条连接到指定点 mPath.lineTo(0,50); mPath.lineTo(20,60); mPath.close();//关闭路径 } @Override protectedvoidonDraw(Canvascanvas){ //设置画面背景 canvas.drawColor(Color.WHITE); intw=canvas.getWidth(); inth=canvas.getHeight(); intcx=w/2; intcy=h/2; canvas.translate(cx,cy);//移动画面,把指针放到中央 if(mValues!=null){ canvas.rotate(-mValues[0]); } canvas.drawPath(mPath,mPaint); } } }
更多关于Android相关内容感兴趣的读者可查看本站专题:《Android基本组件用法总结》、《Android视图View技巧总结》、《Android布局layout技巧总结》、《Android资源操作技巧汇总》、《Android文件操作技巧汇总》、《Android开发入门与进阶教程》、《Android编程之activity操作技巧总结》及《Android控件用法总结》
希望本文所述对大家Android程序设计有所帮助。