1

我正在開發一款使用適用於Android的Google地圖API的應用。我想創建類似於Android的Google地圖應用的動畫效果,該效果將地圖片段保留在底部表單上方,而不管其狀態如何。以下是效果:如何在Android版Google Maps API中爲地圖片段設置動畫效果

enter image description here

我試圖Map.setPadding()給出here轉移底部片上方的地圖組分(通過計算在運行時底部片材的高度並將其傳遞作爲參數的),然後使用ViewGroup.invalidate()然後ViewGroup.requestLayout()刷新佈局,但我無法像Google地圖應用那樣生成平滑效果。我想到的另一個解決方案是使用Activity Transition,但不知道如何在Fragments中實現它。請幫忙。在此先感謝!:)

回答

0

我想出了自己。這很簡單。如果您使用Android的BottomSheetBehavior實施底部工作表,然後在其onStateChanged()方法中,您可以爲Google地圖執行相機動畫。這是一個攝像機動畫,在底部圖紙狀態發生變化並在CameraUpdateFactory.scrollBy(float, float)的幫助下執行,允許您在x和y軸上移動攝像機位置。進一步的細節可以發現here

我只是改變垂直y軸,因爲我想讓地圖垂直移動(或調整)並將其傳遞給mMap.animateCamera()方法。 bs_height是我在運行時計算的底部頁面的高度。

下面的代碼片段展示瞭如何:

@Override 
    public void onStateChanged(@NonNull View bottomSheet, int newState) { 
     switch (newState) { 
      case BottomSheetBehavior.STATE_COLLAPSED : 
       collapsedStateAnimation(); 
        mMap.animateCamera(CameraUpdateFactory.scrollBy(0.0f, bs_height - 200)); 
       break; 
      case BottomSheetBehavior.STATE_DRAGGING : 
       ... 
       break; 
      case BottomSheetBehavior.STATE_EXPANDED : 
        mMap.animateCamera(CameraUpdateFactory.scrollBy(0.0f, bs_height + 200)); 
       break; 
     } 
    } 
相關問題