Ben şimdi günler için beynimi rafa ve Googled ve SO'ed var ama raporlama başka birilerini bulmak için görünmüyor olabilir Böyle bir sorun (onu kaçırmış olabilir).Longpress üzerinde Android Map Marker aslında LongPressed (API 15 üzerinde) altında çizilir
Başkaları arasında uzun bastırmalarını dinleyen ve haritamdaki işaretleri işaretlemek için kullanıyorum özel bir Mapview Sınıfı var. API-8'de tamamdır. Ancak API-15 üzerinde işaretleyici, kullanıcı parmağının uzun bastırma yaptığı yerde yaklaşık 2 cm aşağıya iner. Bu, gerçek cihaz (samsung s2) ve eclipse emülatörü için de gözlenmiştir. Ayrıca, tüm yakınlaştırma seviyelerinde işaretlenen işaretleme alanına (yaklaşık 2 cm'lik bir uzaklık) karşı uzun basılan parmak alanı gözlenir.
İşte (Bir yerden çekti) Özelleştirilmiş MapView Sınıf geçerli:
public class MyCustomMapView extends MapView {
public interface OnLongpressListener {
public void onLongpress(MapView view, GeoPoint longpressLocation);
}
static final int LONGPRESS_THRESHOLD = 500;
private GeoPoint lastMapCenter;
private Timer longpressTimer = new Timer();
private MyCustomMapView.OnLongpressListener longpressListener;
public MyCustomMapView(Context context, String apiKey) {
super(context, apiKey);
}
public MyCustomMapView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MyCustomMapView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public void setOnLongpressListener(MyCustomMapView.OnLongpressListener listener) {
longpressListener = listener;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
handleLongpress(event);
return super.onTouchEvent(event);
}
private void handleLongpress(final MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
// Finger has touched screen.
longpressTimer = new Timer();
longpressTimer.schedule(new TimerTask() {
@Override
public void run() {
GeoPoint longpressLocation = getProjection().fromPixels((int)event.getX(), (int)event.getY());
/*
* Fire the listener. We pass the map location
* of the longpress as well, in case it is needed
* by the caller.
*/
longpressListener.onLongpress(MyCustomMapView.this, longpressLocation);
}
}, LONGPRESS_THRESHOLD);
lastMapCenter = getMapCenter();
}
if (event.getAction() == MotionEvent.ACTION_MOVE) {
if (!getMapCenter().equals(lastMapCenter)) {
// User is panning the map, this is no longpress
longpressTimer.cancel();
}
lastMapCenter = getMapCenter();
}
if (event.getAction() == MotionEvent.ACTION_UP) {
// User has removed finger from map.
longpressTimer.cancel();
}
if (event.getPointerCount() > 1) {
// This is a multitouch event, probably zooming.
longpressTimer.cancel();
}
}
Ve bu yukarıda Class diyoruz nasıl: Bir SetBounds sorun gibi görünüyor
custom_marker = getResources().getDrawable(R.drawable.marker3);
custom_marker.setBounds(-custom_marker.getIntrinsicWidth(), -custom_marker.getIntrinsicHeight(), 0, 0);
customSitesOverlay = new CustomSitesOverlay(custom_marker);
mapView.getOverlays().add(customSitesOverlay);
customSitesOverlay.addOverlay(new OverlayItem(longpressLocation, "User Marker", id));
Ben de aynı sorunu yaşıyorum. @Marka, herhangi bir çözüm bulduktan sonra lütfen paylaşın .... Teşekkürler –
Üzgünüz @MukeshY bu yaklaşımı tamamen terk ettik ve kod üzerinden harita üzerinde sabit bir pin için tercih ettik. –