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程序设计有所帮助。