[java] Google Maps API의 “내 위치”버튼 위치 변경

Google Maps Android API v2를 사용하고 있으며 “내 위치”버튼의 위치를 ​​확인하는 방법이 필요합니다.

다음과 같은 “내 위치”버튼이 나타납니다.

GooglePlayServicesUtil.isGooglePlayServicesAvailable(getApplicationContext());
final GoogleMap map = ((SupportMapFragment) getSupportFragmentManager()
        .findFragmentById(R.id.map)).getMap();

// This gets the button
map.setMyLocationEnabled(true);



답변

GoogleMap.setPadding (left, top, right, bottom)을 사용하면지도에서 다른보기에 의해 가려 질 수있는 부분을 나타낼 수 있습니다. 패딩을 설정하면 표준지도 컨트롤의 위치가 변경되고 카메라 업데이트는 패딩 된 영역을 사용합니다.

https://developers.google.com/maps/documentation/android/map#map_padding


답변

“내 위치”버튼을 가져 와서 다음과 같이 이동할 수 있습니다.

public class MapFragment extends SupportMapFragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View mapView = super.onCreateView(inflater, container, savedInstanceState);

    // Get the button view 
    View locationButton = ((View) mapView.findViewById(1).getParent()).findViewById(2);

    // and next place it, for exemple, on bottom right (as Google Maps app)
    RelativeLayout.LayoutParams rlp = (RelativeLayout.LayoutParams) locationButton.getLayoutParams();
    // position on right bottom
    rlp.addRule(RelativeLayout.ALIGN_PARENT_TOP, 0);
    rlp.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, RelativeLayout.TRUE);
    rlp.setMargins(0, 0, 30, 30);
    }
}


답변

이것이 최선의 해결책은 아니지만지도 위에 자신의 버튼을 놓고 직접 처리 할 수 ​​있습니다. 다음이 필요합니다.

1) frameLayout에 맵을 넣고 상단에 버튼을 추가합니다. 예

<FrameLayout
    android:id="@+id/mapFrame"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >



    <fragment
        xmlns:map="http://schemas.android.com/apk/res-auto"
        android:id="@+id/mapFragment"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        class="com.google.android.gms.maps.MapFragment"
        map:mapType="normal"
        map:uiCompass="true" />

    <ImageButton
        android:id="@+id/myMapLocationButton"
        android:layout_width="36dp"
        android:layout_height="36dp"
        android:layout_gravity="bottom|right"
        android:background="@drawable/myMapLocationDrawable"
        android:contentDescription="My Location" />

</FrameLayout>

2) setMyLocationEnabled (true)를 호출 할 때 버튼이 나타나지 않도록지도 UI 설정을 편집합니다. map.getUiSettings ()를 통해이 작업을 수행 할 수 있습니다. setMyLocationButtonEnabled (false);

3) 새 버튼 클릭을 처리하여 제공된 버튼의 기능을 에뮬레이션합니다. 예 : mMap.setMyLocationEnabled (…); 지도를 현재 위치로 이동합니다.

도움이되기를 바라거나 누군가가 당신을 위해 더 간단한 해결책으로 오래 오기를 바랍니다 😉


답변

위에서 이미 설명했듯이 fabLouis의 답변에 약간의 추가입니다. SupportMapFragment에서지도보기를 가져올 수도 있습니다.

        /**
         * Move the button
         */
        SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().
                findFragmentById(R.id.map);
        View mapView = mapFragment.getView();
        if (mapView != null &&
                mapView.findViewById(1) != null) {
            // Get the button view
            View locationButton = ((View) mapView.findViewById(1).getParent()).findViewById(2);
            // and next place it, on bottom right (as Google Maps app)
            RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams)
                    locationButton.getLayoutParams();
            // position on right bottom
            layoutParams.addRule(RelativeLayout.ALIGN_PARENT_TOP, 0);
            layoutParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, RelativeLayout.TRUE);
            layoutParams.setMargins(0, 0, 30, 30);
        }


답변

다른 사람들이 사용하는 이러한 매직 뷰 ID를보고 싶지 않습니다. 태그를 사용하여 MapView . 자녀 .

확대 / 축소 컨트롤 위에 내 위치 버튼 을 배치하는 방법은 다음과 같습니다 .

// Get map views
View location_button =_mapView.findViewWithTag("GoogleMapMyLocationButton");
View zoom_in_button = _mapView.findViewWithTag("GoogleMapZoomInButton");
View zoom_layout = (View) zoom_in_button.getParent();

// adjust location button layout params above the zoom layout
RelativeLayout.LayoutParams location_layout = (RelativeLayout.LayoutParams) location_button.getLayoutParams();
location_layout.addRule(RelativeLayout.ALIGN_PARENT_TOP, 0);
location_layout.addRule(RelativeLayout.ABOVE, zoom_layout.getId());


답변

아래 코드를 사용하여 내 위치 버튼을 뷰의 오른쪽 하단 모서리에 재배치하여지도 조각에서이 문제를 해결했습니다. 여기에 내 Maps Activity.java가 있습니다.

onCreate () 메서드에이 코드 줄을 추가합니다.

 SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.map);
        mapView = mapFragment.getView();
        mapFragment.getMapAsync(this);

그리고 여기에 onMapReady () 코드가 있습니다 :-

@Override
        public void onMapReady(GoogleMap googleMap) {
            mMap = googleMap;
            mMap.setMyLocationEnabled(true);

            // Add a marker in Sydney and move the camera
            LatLng sydney = new LatLng(-34, 151);
            mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney"));
            mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));

            if (mapView != null &&
                    mapView.findViewById(Integer.parseInt("1")) != null) {
                // Get the button view
                View locationButton = ((View) mapView.findViewById(Integer.parseInt("1")).getParent()).findViewById(Integer.parseInt("2"));
                // and next place it, on bottom right (as Google Maps app)
                RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams)
                        locationButton.getLayoutParams();
                // position on right bottom
                layoutParams.addRule(RelativeLayout.ALIGN_PARENT_TOP, 0);
                layoutParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, RelativeLayout.TRUE);
                layoutParams.setMargins(0, 0, 30, 30);
            }

        }

나는 이것이 당신의 문제를 해결하기를 바랍니다. 감사.


답변

먼저 Google지도보기를 가져옵니다.

 View mapView = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getView();

그런 다음 MyLocation 버튼 (Android Studio 디버거의 ID)을 찾습니다.

 View btnMyLocation = ((View) mapView.findViewById(1).getParent()).findViewById(2);

마지막으로 MyLocation 버튼에 대한 새 RelativeLayout 매개 변수를 설정하기 만하면됩니다 (이 경우 상위 오른쪽 + 가운데에 수직으로 정렬).

RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(80,80); // size of button in dp
    params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT, RelativeLayout.TRUE);
    params.addRule(RelativeLayout.CENTER_VERTICAL, RelativeLayout.TRUE);
    params.setMargins(0, 0, 20, 0);
    btnMyLocation.setLayoutParams(params);

팔! 이제 원하는대로 이동할 수 있습니다.)