[英]Adding a custom marker to map - Android
I currently have an app which displays google maps to the user using MapView.我目前有一个使用 MapView 向用户显示谷歌地图的应用程序。
I have been trying to place a marker on the map using this code,我一直在尝试使用此代码在 map 上放置一个标记,
public boolean onTouchEvent(MotionEvent event, MapView mapView) {
if (event.getAction() == 1) {
GeoPoint p = mapView.getProjection().fromPixels((int) event.getX(),
(int) event.getY());
DemoOverlay demoOverlay = new DemoOverlay();
mapView.getOverlays().add(demoOverlay);
mapView.invalidate();
}
return false;
}
I have a Demo Overlay set up which puts a marker on the map, however when I touch the screen the marker never appears.我有一个演示覆盖设置,它在 map 上放置了一个标记,但是当我触摸屏幕时,标记永远不会出现。
Any help would be appreciated !!!任何帮助,将不胜感激 !!!
GeoPoint p = mapView.getProjection().fromPixels((int) event.getX(),(int) event.getY());
Drawable srcdrawable = getApplicationContext().getResources().getDrawable(R.drawable.pin_blue);
CustomItemizedOverlay srcitemizedOverlay = new CustomItemizedOverlay(srcdrawable, getApplicationContext());
OverlayItem srcoverlayitem = new OverlayItem(p, "Hello!", "This is your Location.");
srcitemizedOverlay.addOverlay(srcoverlayitem);
mapView.getOverlays().clear();
mapView.getOverlays().add(srcitemizedOverlay);
mapController.animateTo(srcpoint);
mapController.setZoom(16);
Use the above code in ontouch method also use the below CustomItemizedOverlay.java class在 ontouch 方法中使用上面的代码也使用下面的 CustomItemizedOverlay.java class
public class CustomItemizedOverlay extends ItemizedOverlay<OverlayItem> {
private final ArrayList<OverlayItem> mapOverlays = new ArrayList<OverlayItem>();
private Context context;
public CustomItemizedOverlay(Drawable defaultMarker) {
super(boundCenterBottom(defaultMarker));
}
public CustomItemizedOverlay(Drawable defaultMarker, Context context) {
this(defaultMarker);
this.context = context;
}
@Override
protected OverlayItem createItem(int i) {
return mapOverlays.get(i);
}
@Override
public int size() {
return mapOverlays.size();
}
public void addOverlay(OverlayItem overlay) {
mapOverlays.add(overlay);
this.populate();
}
}
android-mapviewballoons is really one of the best maps library for Android. Why don't you take a try? android-mapviewballoons确实是 Android 最好的地图库之一。你为什么不试试呢? :) :)
Modify your code like this---像这样修改你的代码---
public boolean onTouchEvent(MotionEvent event, MapView mapView)
{
if (event.getAction() == 1) {
p = mapView.getProjection().fromPixels(
(int) event.getX(),
(int) event.getY());
Toast.makeText(getBaseContext(),p.getLatitudeE6() / 1E6 + "," +p.getLongitudeE6() /1E6 ,Toast.LENGTH_SHORT).show();
List<Overlay> mapOverlays = mapView.getOverlays();
Drawable drawable = this.getResources().getDrawable(R.drawable.map_point);
AddItemizedOverlay itemizedOverlay =
new AddItemizedOverlay(drawable, this);
OverlayItem overlayitem = new OverlayItem(p, "", "");
itemizedOverlay.addOverlay(overlayitem);
mapOverlays.add(itemizedOverlay);
return true;
}
return false;
}
Make an overlay class--做一个覆盖类——
AddItemizedOverlay.class-- AddItemizedOverlay.class--
public class AddItemizedOverlay extends ItemizedOverlay<OverlayItem> {
private ArrayList<OverlayItem> mapOverlays = new ArrayList<OverlayItem>();
private Context context;
public AddItemizedOverlay(Drawable defaultMarker) {
super(boundCenterBottom(defaultMarker));
}
public AddItemizedOverlay(Drawable defaultMarker, Context context) {
this(defaultMarker);
this.context = context;
}
@Override
protected OverlayItem createItem(int i) {
return mapOverlays.get(i);
}
@Override
public int size() {
return mapOverlays.size();
}
@Override
protected boolean onTap(int index) {
Log.e("Tap", "Tap Performed");
return true;
}
public void addOverlay(OverlayItem overlay) {
mapOverlays.add(overlay);
this.populate();
}
}
it will show the point when u touch the screen.当你触摸屏幕时它会显示点。
Thanks for suggestions but I have decided to follow these tutorials as they cover exactly what I need, http://thenewboston.org/watch.php?cat=6&number=133感谢您的建议,但我决定按照这些教程进行操作,因为它们完全涵盖了我的需要, http://thenewboston.org/watch.php?cat=6&number=133
This video in particular is the one which covers my question,这段视频特别涵盖了我的问题,
http://thenewboston.org/watch.php?cat=6&number=141 http://thenewboston.org/watch.php?cat=6&number=141
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.