如何在openstreetmap android中制作触摸事件
我在OSM地图上痛苦。这是我新买的。我想用单键点击和长按的方式打印祝酒词。我尝试了所有我能做的事情。但是我没有找到正确的方法。这是我的密码。请给我正确的方法来解决这个问题。非常感谢。请如何在openstreetmap android中制作触摸事件,android,openstreetmap,ontouchlistener,Android,Openstreetmap,Ontouchlistener,我在OSM地图上痛苦。这是我新买的。我想用单键点击和长按的方式打印祝酒词。我尝试了所有我能做的事情。但是我没有找到正确的方法。这是我的密码。请给我正确的方法来解决这个问题。非常感谢。请 public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.map1); final MapView mapView = (Map
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.map1);
final MapView mapView = (MapView) findViewById(R.id.mapViewosm);
mapView.setBuiltInZoomControls(true);
MapController myMapController = mapView.getController();
myMapController.setZoom(13);
ScaleBarOverlay myScaleBarOverlay = new ScaleBarOverlay(this);
mapView.getOverlays().add(myScaleBarOverlay);
Drawable marker = getResources().getDrawable(
android.R.drawable.star_big_on);
int markerWidth = marker.getIntrinsicWidth();
int markerHeight = marker.getIntrinsicHeight();
marker.setBounds(0, markerHeight, markerWidth, 0);
ResourceProxy resourceProxy = new DefaultResourceProxyImpl(
getApplicationContext());
myItemizedOverlay = new MyItemizedOverlay(marker, resourceProxy);
mapView.getOverlays().add(myItemizedOverlay);
GeoPoint myPoint1 = new GeoPoint(0 * 1000000, 0 * 1000000);
myItemizedOverlay.addItem(myPoint1, "myPoint1", "myPoint1");
GeoPoint myPoint2 = new GeoPoint(50 * 1000000, 50 * 1000000);
myItemizedOverlay.addItem(myPoint2, "myPoint2", "myPoint2");
myLocationOverlay = new MyLocationOverlay(this, mapView);
mapView.getOverlays().add(myLocationOverlay);
myLocationOverlay.enableMyLocation();
myLocationOverlay.runOnFirstFix(new Runnable() {
public void run() {
mapView.getController().animateTo(
myLocationOverlay.getMyLocation());
}
});
// 2nd
// // --- Create Overlay
// overlayItemArray = new ArrayList<OverlayItem>();
//
// DefaultResourceProxyImpl defaultResourceProxyImpl = new
// DefaultResourceProxyImpl(
// this);
// MyItemizedIconOverlay myItemizedIconOverlay = new
// MyItemizedIconOverlay(
// overlayItemArray, null, defaultResourceProxyImpl);
// mapView.getOverlays().add(myItemizedIconOverlay);
// // ---
// locationManager = (LocationManager)
// getSystemService(Context.LOCATION_SERVICE);
//
// // for demo, getLastKnownLocation from GPS only, not from NETWORK
// Location lastLocation = locationManager
// .getLastKnownLocation(LocationManager.GPS_PROVIDER);
// if (lastLocation != null) {
// updateLoc(lastLocation);
// }
// 1st
anotherOverlayItemArray = new ArrayList<OverlayItem>();
anotherOverlayItemArray.add(new OverlayItem("0, 0", "0, 0",
new GeoPoint(0, 0)));
anotherOverlayItemArray.add(new OverlayItem("US", "US", new GeoPoint(
38.883333, -77.016667)));
ItemizedIconOverlay<OverlayItem> anotherItemizedIconOverlay = new
ItemizedIconOverlay<OverlayItem>(
this, anotherOverlayItemArray, myOnItemGestureListener);
mapView.getOverlays().add(anotherItemizedIconOverlay);
}
// 1st
OnItemGestureListener<OverlayItem> myOnItemGestureListener = new
OnItemGestureListener<OverlayItem>() {
@Override
public boolean onItemLongPress(int arg0, OverlayItem arg1) {
// TODO Auto-generated method stub
Toast.makeText(getApplicationContext(), "long tap",
Toast.LENGTH_SHORT).show();
return true;
}
@Override
public boolean onItemSingleTapUp(int index, OverlayItem item) {
Toast.makeText(getApplicationContext(), "single tap",
Toast.LENGTH_SHORT).show();
Toast.makeText(
Map.this,
item.mDescription + "\n" + item.mTitle + "\n"
+ item.mGeoPoint.getLatitudeE6() + " : "
+ item.mGeoPoint.getLongitudeE6(),
Toast.LENGTH_LONG).show();
return true;
}
};
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.map1);
最终MapView MapView=(MapView)findViewById(R.id.mapViewosm);
mapView.SetBuilTinZoomControl(真);
MapController myMapController=mapView.getController();
myMapController.setZoom(13);
ScaleBarOverlay myScaleBarOverlay=新的ScaleBarOverlay(此);
mapView.getOverlays().add(myScaleBarOverlay);
可绘制标记=getResources().getDrawable(
android.R.drawable.star\u big\u on);
int-markerWidth=marker.getIntrinsicWidth();
int-markerHeight=marker.getIntrinsicHeight();
标记.立根(0,标记高度,标记宽度,0);
ResourceProxy ResourceProxy=新的DefaultResourceProxyImpl(
getApplicationContext());
myItemizedOverlay=新的myItemizedOverlay(标记,resourceProxy);
mapView.getOverlays().add(myItemizedOverlay);
地质点myPoint1=新的地质点(0*1000000,0*1000000);
添加项(myPoint1,“myPoint1”,“myPoint1”);
地质点myPoint2=新的地质点(50*1000000,50*1000000);
添加项(myPoint2、“myPoint2”、“myPoint2”);
myLocationOverlay=新建myLocationOverlay(此为地图视图);
mapView.getOverlays().add(myLocationOverlay);
myLocationOverlay.enableMyLocation();
myLocationOverlay.runOnFirstFix(新的Runnable()文件){
公开募捐{
mapView.getController().animateTo(
myLocationOverlay.getMyLocation());
}
});
//第二
///---创建覆盖
//overlayItemArray=新的ArrayList();
//
//DefaultResourceProxyImpl DefaultResourceProxyImpl=新建
//DefaultResourceProxyImpl(
//这),;
//MyItemIzedEdiconOverlay MyItemIzedEdiconOverlay=新建
//Myitemizedictionoverlay(
//overlayItemArray,null,defaultResourceProxyImpl);
//mapView.getOverlays().add(MyItemIzedEdiconOverlay);
// // ---
//locationManager=(locationManager)
//getSystemService(Context.LOCATION\u服务);
//
////对于演示,仅从GPS获取LastKnown位置,而不是从网络获取
//Location lastLocation=locationManager
//.getLastKnownLocation(LocationManager.GPS\U提供商);
//if(lastLocation!=null){
//updateLoc(最后位置);
// }
//第一
anotherOverlayItemArray=new ArrayList();
另一个OverlayItemArray.add(新的OverlayItem(“0,0”,“0,0”,
新的地质点(0,0));
另一个OverlayItemArray.add(新的OverlayItem(“美国”,“美国”,新的地质点(
38.883333, -77.016667)));
ItemizedEdiconOverlay另一个ItemizedEdiconOverlay=新建
项目法令概述(
这是另一个OverlayItemArray,myOnItemGestureListener);
mapView.getOverlays().add(AnotheritemizedEdiconOverlay);
}
//第一
OnItemEstureListener myOnItemGestureListener=新建
OnItemTestureListener(){
@凌驾
公共布尔值(int arg0,OverlayItem arg1){
//TODO自动生成的方法存根
Toast.makeText(getApplicationContext(),“长点击”,
吐司。长度(短)。show();
返回true;
}
@凌驾
公共布尔值onItemSingleTapUp(整型索引,覆盖项项){
Toast.makeText(getApplicationContext(),“单点击”,
吐司。长度(短)。show();
Toast.makeText(
地图,这个,
item.mDescription+“\n”+item.mTitle+“\n”
+item.mGeoPoint.getLatitudeE6()+“:”
+item.mGeoPoint.getLongitudeE6(),
Toast.LENGTH_LONG).show();
返回true;
}
};
我终于找到了这个问题的解决方案。这是我的答案
@Override
public boolean onSingleTapConfirmed(MotionEvent e, MapView mapView) {
Projection proj = mapView.getProjection();
p = (GeoPoint) proj.fromPixels((int) e.getX(), (int) e.getY());
proj = mapView.getProjection();
loc = (GeoPoint) proj.fromPixels((int) e.getX(), (int) e.getY());
String longitude = Double
.toString(((double) loc.getLongitudeE6()) / 1000000);
String latitude = Double
.toString(((double) loc.getLatitudeE6()) / 1000000);
Toast toast = Toast.makeText(getApplicationContext(),
"Longitude: "
+ longitude + " Latitude: " + latitude, Toast.LENGTH_SHORT);
toast.show();
return true;
}
private void addLocation(double lat, double lng) {
// ---Add a location marker---
p = new GeoPoint((int) (lat * 1E6), (int) (lng * 1E6));
Drawable marker = getResources().getDrawable(
android.R.drawable.star_big_on);
int markerWidth = marker.getIntrinsicWidth();
int markerHeight = marker.getIntrinsicHeight();
marker.setBounds(0, markerHeight, markerWidth, 0);
ResourceProxy resourceProxy = new DefaultResourceProxyImpl(
getApplicationContext());
myItemizedOverlay = new MyItemizedOverlay(marker, resourceProxy);
List<Overlay> listOfOverlays = mapView.getOverlays();
listOfOverlays.clear();
listOfOverlays.add(myItemizedOverlay);
mapView.invalidate();
}
@覆盖
公共布尔值OnSingleTapConfiged(MotionEvent e,MapView MapView){
Projection proj=mapView.getProjection();
p=(地理点)项目从像素((int)e.getX(),(int)e.getY());
proj=mapView.getProjection();
loc=(地理点)proj.fromPixels((int)e.getX(),(int)e.getY());
字符串经度=双精度
.toString(((双)loc.getLongitudeE6())/1000000);
字符串纬度=双
.toString(((双)loc.getLatitudeE6())/1000000);
Toast Toast=Toast.makeText(getApplicationContext(),
“经度:”
+经度+“纬度:”+纬度,土司。长度(短);
toast.show();
返回true;
}
专用位置(双lat、双lng){
//---添加位置标记---
p=新地质点((内部)(纬度*1E6),(内部)(液化天然气*1E6));
可绘制标记=getResources().getDrawable(
android.R.drawable.star\u big\u on);
int-markerWidth=marker.getIntrinsicWidth();
int-markerHeight=marker.getIntrinsicHeight();
标记.立根(0,标记高度,标记宽度,0);
ResourceProxy ResourceProxy=新的DefaultResourceProxyImpl(
getApplicationContext());
myItemizedOverlay=新的myItemizedOverlay(标记,resourceProxy);
List ListoForLays=mapView.getOverlays();
listOfOverlays.clear();
添加(myItemizedOverlay);
mapView.invalidate();
}
在osm中,您可以使用MapEventsReceiver来检测抽头:
MapEventsReceiver mReceive = new MapEventsReceiver() {
@Override
public boolean singleTapConfirmedHelper(GeoPoint p) {
// write your code here
return false;
}
@Override
public boolean longPressHelper(GeoPoint p) {
// write your code here
return false;
}
};
MapEventsOverlay OverlayEvents = new MapEventsOverlay(getBaseContext(), mReceive);
map.getOverlays().add(OverlayEvents);
资料来源: