您好,登錄后才能下訂單哦!
怎么在Android中使用方向傳感器?相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
具體如下:
public class SensorHandActivity extends GraphicsActivity { // 傳感器管理對象 private SensorManager mSensorManager; // 傳感器類 private Sensor mSensor; // 自定義繪制指針View private 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") @Override protected 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); } @Override protected 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); } @Override protected void onStop() { // 在onStop方法中取消注冊監聽 mSensorManager.unregisterListener(mSensorListener); super.onStop(); } private class MyCompassView extends View { // 定義畫筆Paint private Paint mPaint; // 定義繪制指針的路徑Path private 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();// 關閉路徑 } @Override protected 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); } } }
看完上述內容,你們掌握怎么在Android中使用方向傳感器的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。