问题描述
对于学校项目,我必须使用一些地图(谷歌地图或 openstreetmap)创建一个应用程序。我的选择是使用 OpenStreetMap,因为它是免费的。
所以我有一个表格,在这个表格中我需要点击地图来获得我想要的长/纬度。
但我不知道如何正确设置 onclicklistener。
这是我的活动:
package fr.miage.voyage_voyage;
import androidx.appcompat.app.AppCompatActivity;
import androidx.preference.PreferenceManager;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import org.osmdroid.api.IMapController;
import org.osmdroid.config.Configuration;
import org.osmdroid.events.MapListener;
import org.osmdroid.events.ScrollEvent;
import org.osmdroid.events.ZoomEvent;
import org.osmdroid.tileprovider.tilesource.TileSourceFactory;
import org.osmdroid.util.GeoPoint;
import org.osmdroid.views.MapController;
import org.osmdroid.views.MapView;
import org.w3c.dom.Text;
public class ForMetape extends AppCompatActivity {
private MapView mapView;
EditText et_nom;
TextView et_date,et_long,et_lat;
IMapController mapController;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_form_etape);
et_nom = findViewById(R.id.edit_nom_etape);
et_date = findViewById(R.id.edit_date_etape);
et_long = findViewById(R.id.edit_long_etape);
et_lat = findViewById(R.id.edit_lat_etape);
Configuration.getInstance().load(getApplicationContext(),PreferenceManager.getDefaultSharedPreferences(getApplicationContext()));
//Configuration.().load(getApplicationContext(),PreferenceManager.getDefaultSharedPreferences(getApplicationContext()));
mapView = findViewById(R.id.map_form_etape);
mapView.setTileSource(TileSourceFactory.MAPNIK); //render
mapView.setBuiltInZoomControls(true); //zoomable
GeoPoint startPoint = new GeoPoint(43.650,7.00517);
mapController = mapView.getController();
mapController.setZoom(18.0);
mapController.setCenter(startPoint);
}
@Override
public void onPause() {
super.onPause();
mapView.onPause();
}
@Override
public void onResume() {
super.onResume();
mapView.onResume();
}
}
还有我的布局:
<?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:gravity="center"
android:padding="20dp"
android:layout_height="match_parent"
tools:context=".ForMetape">
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Nom de l'étape"
android:id="@+id/edit_nom_etape"
/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/edit_nom_etape"
android:background="?attr/editTextBackground"
android:textAppearance="?android:attr/textAppearanceMediumInverse"
android:layout_marginTop="8dp"
android:hint="Date"
android:id="@+id/edit_date_etape"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/edit_date_etape"
android:background="?attr/editTextBackground"
android:textAppearance="?android:attr/textAppearanceMediumInverse"
android:layout_marginTop="8dp"
android:hint="Longitude (Appuyez sur la carte à l'emplacement souhaité)"
android:id="@+id/edit_long_etape"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/edit_long_etape"
android:background="?attr/editTextBackground"
android:textAppearance="?android:attr/textAppearanceMediumInverse"
android:layout_marginTop="8dp"
android:hint="Longitude (Appuyez sur la carte à l'emplacement souhaité)"
android:id="@+id/edit_lat_etape"/>
<org.osmdroid.views.MapView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/edit_lat_etape"
android:layout_marginTop="8dp"
android:id="@+id/map_form_etape"
/>
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/btn_addEtape"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
android:layout_marginRight="10dp"
android:layout_alignParentBottom="true"
android:layout_alignEnd="@+id/map_form_etape"
android:src="@drawable/ic_add_black_24dp"/>
</RelativeLayout>
感谢您的帮助!
解决方法
好的,我找到了 myserlf,如果其他人需要,这里是解决方案:
mapView.getOverlays().add(new MapEventsOverlay(new MapEventsReceiver() {
@Override
public boolean singleTapConfirmedHelper(GeoPoint p) {
et_lat.setHint(String.valueOf(p.getLatitude()));
et_long.setHint(String.valueOf(p.getLongitude()));
return false;
}
@Override
public boolean longPressHelper(GeoPoint p) {
return false;
}
}));