Как сделать приложение "Движущаяся карта" со статическим маркером и получать широту и долготу при редактировании текста?

Что я пытаюсь сделать, так это создать приложение Google Maps, в котором я могу перемещать карту, а положение маркера остается по центру (DONE), что-то вроде Uber. Затем после нажатия кнопки (buttonGPS) получите координаты широты (tvValueLatitude) и долготы (tvValueLatitude) для отображения в двух текстовых представлениях (DONE). Мне нужна помощь, чтобы скрыть синюю точку, оставив кнопку в правом верхнем углу, а также получить координаты, откуда я поставил серый маркер при перемещении карты. введите описание изображения здесь Далее идет xml файл

<?xml version = "1.0" encoding = "utf-8"?>
<RelativeLayout xmlns:android = "http://schemas.android.com/apk/res/android"
xmlns:app = "http://schemas.android.com/apk/res-auto"
xmlns:tools = "http://schemas.android.com/tools"
android:layout_width = "match_parent"
android:layout_height = "match_parent"
tools:context = ".MapsActivity"
android:paddingBottom = "@dimen/activity_vertical_margin"
android:paddingLeft = "@dimen/activity_horizontal_margin"
android:paddingRight = "@dimen/activity_horizontal_margin"
android:paddingTop = "@dimen/activity_vertical_margin">


    <RelativeLayout
        android:id = "@+id/rlmap"
        android:layout_width = "match_parent"
        android:layout_height = "match_parent"
        android:layout_above = "@+id/rlData">
        <LinearLayout
            android:orientation = "vertical"
            android:layout_width = "match_parent"
            android:layout_height = "match_parent">

            <fragment xmlns:android = "http://schemas.android.com/apk/res/android"

                android:name = "com.google.android.gms.maps.SupportMapFragment"
                android:id = "@+id/map_fragment"
                android:layout_width = "match_parent"
                android:layout_height = "match_parent" />

            <ImageView
                android:layout_width = "wrap_content"
                android:layout_height = "wrap_content"
                android:layout_centerInParent = "true"
                android:src = "@drawable/pin"
                />


        </LinearLayout>
    </RelativeLayout>

    <RelativeLayout
        android:id = "@+id/rlData"
        android:paddingLeft = "@dimen/activity_horizontal_margin"
        android:paddingTop = "@dimen/activity_vertical_margin"
        android:paddingRight = "@dimen/activity_horizontal_margin"
        android:paddingBottom = "0dp"
        android:layout_width = "match_parent"
        android:layout_height = "wrap_content"
        android:layout_alignParentBottom = "true"
        android:layout_alignParentStart = "true">




        <LinearLayout
            android:id = "@+id/llGPS"
            android:layout_width = "match_parent"
            android:layout_height = "wrap_content"

            android:layout_marginTop = "@dimen/activity_horizontal_margin"
            android:divider = "?android:dividerHorizontal"
            android:orientation = "horizontal"
            android:showDividers = "middle">

            <Button
                android:id = "@+id/buttonGPS"
                android:layout_width = "0dp"
                android:layout_height = "wrap_content"
                android:layout_marginTop = "@dimen/activity_vertical_margin"
                android:layout_weight = "1"
                android:gravity = "center"
                android:text = "Get GPS" />

            <LinearLayout
                android:layout_width = "0dp"
                android:layout_height = "wrap_content"
                android:layout_marginTop = "@dimen/activity_horizontal_margin"
                android:layout_weight = "1"
                android:divider = "?android:dividerVertical"
                android:orientation = "vertical"
                android:showDividers = "middle">

                <TextView

                    android:id = "@+id/tvLatitude"
                    android:layout_width = "match_parent"
                    android:layout_height = "wrap_content"
                    android:gravity = "center"
                    android:text = "@string/Latitude"
                    android:textAppearance = "?android:attr/textAppearanceMedium"
                    android:textColor = "@color/Black"

                    />

                <TextView

                    android:id = "@+id/tvValueLatitude"
                    android:layout_width = "match_parent"
                    android:layout_height = "wrap_content"
                    android:layout_marginTop = "@dimen/activity_vertical_margin"
                    android:gravity = "center"
                    android:hint = "@string/valueLatitude"
                    android:textAppearance = "?android:attr/textAppearanceMedium"
                    android:textColor = "@color/Black"
                    android:textColorHint = "@color/Gray" />


            </LinearLayout>

            <LinearLayout
                android:layout_width = "0dp"
                android:layout_height = "wrap_content"
                android:layout_marginTop = "@dimen/activity_horizontal_margin"
                android:layout_weight = "1"
                android:divider = "?android:dividerVertical"
                android:orientation = "vertical"
                android:showDividers = "middle">

                <TextView

                    android:id = "@+id/tvLongitude"
                    android:layout_width = "match_parent"
                    android:layout_height = "wrap_content"
                    android:gravity = "center"
                    android:text = "@string/Longitude"
                    android:textAppearance = "?android:attr/textAppearanceMedium"
                    android:textColor = "@color/Black"

                    />

                <TextView

                    android:id = "@+id/tvValueLongitude"
                    android:layout_width = "match_parent"
                    android:layout_height = "wrap_content"
                    android:layout_marginTop = "@dimen/activity_vertical_margin"
                    android:gravity = "center"
                    android:hint = "@string/valueLongitude"
                    android:textAppearance = "?android:attr/textAppearanceMedium"
                    android:textColor = "@color/Black"
                    android:textColorHint = "@color/Gray" />


            </LinearLayout>

        </LinearLayout>
    </RelativeLayout>

Основная деятельность

public class MapsActivity extends FragmentActivity implements OnMapReadyCallback{

    private GoogleMap mMap;
    TextView lat,longt;



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_maps);
        lat=findViewById(R.id.tvValueLongitude);
        longt=findViewById(R.id.tvValueLatitude);
        SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);
    }
    @Override
    public void onMapReady(GoogleMap googleMap) {
        mMap = googleMap;

        // Add a marker in Sydney, Australia, 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));
    }




}

Пока у меня только карта. Любая помощь в кодировании или указание хорошего учебника было бы замечательно, спасибо!

Поместите SupportMapFragment в контейнер, поддерживающий упорядочение по оси Z (например, ConstraintLayout). Поместите маркер в тот же контейнер по центру карты (примечание: это будет намного проще, если у маркера будет «точка» в центре изображения). Теперь, когда пользователь перемещает карту, все, что вам нужно сделать, это получить координаты центра карты, которые вы можете получить с getCameraPosition() на GoogleMap.

CommonsWare 05.12.2018 01:15

Взгляните на ответ это.

Andrii Omelchenko 05.12.2018 10:59

Возможный дубликат Android: перетащите карту, удерживая маркер в центре.

Andrii Omelchenko 05.12.2018 11:01
1
3
538
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если я понимаю ваш вопрос, вам нужно:

Глобальная переменная: private Marker marker;

Поместите маркер запуска в центр экрана:

    public void onMapReady(GoogleMap googleMap) {
            mMap = googleMap;
            mMap.setOnCameraMoveListener(this);
            LatLng center = mMap.getCameraPosition().target;
            marker = mMap.addMarker(new MarkerOptions().position(mMap.getCameraPosition().target));
    }

Измените его положение:

@Override
public void onCameraMove() {
    LatLng center = mMap.getCameraPosition().target;
    marker.setPosition(center);
}

И onClick, чтобы получить текущую LatLng - LatLng markerPosition = marker.getPosition();

Другие вопросы по теме