今天要介紹的功能是:指南針。指南針不僅僅是一個北方指示器,它是一個能夠幫助我們在世界中導航的實用工具。
對於開發者來說,將指南針集成到應用程序中可以為用戶提供準確的方向感知,無論是在城市中漫遊還是在大自然中探險。大家可能會覺得跟摩斯密碼有什麼關係,主要加上這個功能是希望這個 APP 是一個在發生山難或之類意外時能使用的工具,所以才加入此功能。
這裡的圖片是同學幫我設計的因我沒有什麼美術細胞
@Override
protected void onResume() {
//方向傳感器監聽
super.onResume(); sensorManager.registerListener(this,sensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION),sensorManager.SENSOR_DELAY_GAME);
}
@Override
protected void onPause() {
//取消監聽器
super.onPause();
sensorManager.unregisterListener(this);
}
@Override
public void onSensorChanged(SensorEvent event) {
float degree = Math.round(event.values[0]); // 從SensorEvent中獲取方向數值
// 創建旋轉動畫,將指南針圖像旋轉到當前方向
RotateAnimation rotateAnimation = new RotateAnimation(
currentDegree, -degree, // 起始角度和目標角度
Animation.RELATIVE_TO_SELF, 0.5f, // 旋轉中心的X座標(相對於自身)
Animation.RELATIVE_TO_SELF, 0.5f // 旋轉中心的Y座標(相對於自身)
);
rotateAnimation.setDuration(200); // 設定動畫持續時間(毫秒)
rotateAnimation.setFillAfter(true); // 動畫結束後保持最終狀態
degree_textView.setText((int) degree + "°"); // 在TextView中顯示當前方向的角度
// 根據方向角度顯示方位
if (degree == 0)
position_textView.setText("北");
else if (degree > 0 && degree < 90)
position_textView.setText("東北");
else if (degree == 90)
position_textView.setText("東");
else if (degree > 90 && degree < 180)
position_textView.setText("東南");
else if (degree == 180)
position_textView.setText("南");
else if (degree > 180 && degree < 270)
position_textView.setText("西南");
else if (degree == 270)
position_textView.setText("西");
else if (degree > 270 && degree < 360)
position_textView.setText("西北");
Log.e("TAG", "onSensorChanged: " + degree); // 輸出方向角度到日誌
compass_pointer.startAnimation(rotateAnimation); // 開始指南針圖像的旋轉動畫
currentDegree = -degree; // 更新當前方向角度
}
這就是今天介紹的功能拉,明天繼續下一個~!!