2017-05-15 181 views
1

在Google Maps API for Android中,位於右上角的按鈕用於在地圖中定位您的位置。重新定位Google地圖片段中的MyLocation按鈕

我想知道是否可以重新定位這個圖標,這是默認情況下Android的谷歌地圖的API,因爲在頂部我打算添加一個EditText,就好像它是浮動的。

enter image description here

回答

4

我可以建議2個選項。 不過,我強烈建議你使用的第一個 - 更多的經典和簡單的:


  1. 使用Map Padding(推薦)

您可以重新定位任何的GoogleMap的通過從角落設置Padding進行控制。在你的情況,我會從頂部設置一些填充:

googleMap.setPadding(0, numTop, 0, 0); //numTop = padding of your choice

這也將改變地圖相機。因此,這是偉大的那種用例的中心位置(添加標題/其他浮動控件)。


  • 禁用按鈕並創建的一個自己的(較少推薦)
  • 禁用這將是容易的:

    googleMap.getUiSettings().setMyLocationButtonEnabled(false) 
    

    但是,創建一個新的會更棘手 - 主要是因爲它更難以設置一個完整的。

    1. 我會創建FloatingActionButton,看起來像在谷歌地圖應用程序(example)之一。
      • 你可以從here圖標(稱爲 「我的位置」)
      • 顏色的晶圓廠Material Grey 300(也許400,不記得的時刻)
    2. 定義的的onClick事件將攝像機移動到用戶的當前位置(你將不得不使用Location Service這個

      樣品:

      //Acquire a reference to the system Location Manager 
      LocationManager locationManager = 
          (LocationManager)getSystemService(Context.LOCATION_SERVICE); 
      
      //Acquire the user's location 
      Location selfLocation = locationManager 
          .getLastKnownLocation(LocationManager.PASSIVE_PROVIDER); 
      
      //Move the map to the user's location 
      LatLng selfLoc = new LatLng(selfLocation.getLatitude(), selfLocation.getLongitude()); 
      CameraUpdate update = CameraUpdateFactory.newLatLngZoom(selfLoc, 15); 
      googleMap.moveCamera(update); 
      
    3. 如果您注意到,當您單擊「我的位置」按鈕時,它會開始跟蹤您並相應地移動相機。爲了產生這種效果,您需要覆蓋googleMap.onCameraMovegoogleMap.onCameraIdle,並編寫您的應用程序代碼,以便相機閒置時,地圖將繼續跟隨用戶,每當用戶移動相機時,地圖都會停止。

      樣品爲onCameraIdle

      //Acquire a reference to the system Location Manager 
      LocationManager locationManager = (LocationManager) 
              getSystemService(Context.LOCATION_SERVICE); 
      
      //Acquire the user's location 
      Location selfLocation = locationManager.getLastKnownLocation(LocationManager.PASSIVE_PROVIDER); 
      LatLng cameraLocation = googleMap.getCameraPosition().target; 
      
      float[] results = new float[3]; 
      Location.distanceBetween(selfLocation.getLatitude(), selfLocation.getLongitude(), cameraLocation.latitude, cameraLocation.longitude, results); 
      
      if (results[0] < 30) //30 Meters, you can change that 
          googleMap.moveCamera(...) //Move the camera to user's location 
      
    1
    View locationButton = ((View) findViewById(Integer.parseInt("1")).getParent()).findViewById(Integer.parseInt("2")); 
        locationButton.setVisibility(View.GONE); 
        RelativeLayout.LayoutParams rlp = (RelativeLayout.LayoutParams) locationButton.getLayoutParams(); 
        // position on right bottom 
        rlp.addRule(RelativeLayout.ALIGN_PARENT_TOP, 0); 
        rlp.addRule(RelativeLayout.ALIGN_PARENT_TOP, RelativeLayout.TRUE); 
        rlp.setMargins(0, 180, 180, 0); 
    

    您可以設置保證金,你可能找到我的位置按鈕。