iT邦幫忙

2023 iThome 鐵人賽

DAY 6
0
Mobile Development

[Android Studio & Spring boot 30天挑戰]系列 第 6

[Android Studio & Spring boot 30天挑戰] Day06 - 指南針

  • 分享至 

  • xImage
  •  

今天要介紹的功能是:指南針。指南針不僅僅是一個北方指示器,它是一個能夠幫助我們在世界中導航的實用工具。

對於開發者來說,將指南針集成到應用程序中可以為用戶提供準確的方向感知,無論是在城市中漫遊還是在大自然中探險。大家可能會覺得跟摩斯密碼有什麼關係,主要加上這個功能是希望這個 APP 是一個在發生山難或之類意外時能使用的工具,所以才加入此功能。

流程圖

https://ithelp.ithome.com.tw/upload/images/20230819/201503698VsWcXPrhl.png

UI畫面

這裡的圖片是同學幫我設計的因我沒有什麼美術細胞/images/emoticon/emoticon06.gif
https://ithelp.ithome.com.tw/upload/images/20230819/20150369ZB2aRBidpw.png

程式碼

一開始在進到 onResume() 時就會先去拿方向傳感器監聽,讓手機轉向時可以拿取角度。

 @Override
    protected void onResume() {
        //方向傳感器監聽
        super.onResume(); sensorManager.registerListener(this,sensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION),sensorManager.SENSOR_DELAY_GAME);
    }

並且在 onPause() 釋放掉方向傳感器監聽

    @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; // 更新當前方向角度
}

這就是今天介紹的功能拉,明天繼續下一個~!!


上一篇
[Android Studio & Spring boot 30天挑戰] Day05 - 摩斯轉換(下)
下一篇
[Android Studio & Spring boot 30天挑戰] Day07- 離線地圖與線上地圖(上)
系列文
[Android Studio & Spring boot 30天挑戰]30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言