2011-12-30 2 views
0

Я застрял в этом, я пробовал все возможности, но не успел. Я создал простое приложение с картой для тестирования, и пользователь может просто коснуться карты и на этом месте поставить маркер. Это будет успешно работать на всех устройствах, кроме устройств htc. Я не знаю, как реализовать onTouch событие для MapViewмаркер не отображается на карте в htc

вот мой код onTouch

private class MarkerOverlay extends Overlay{   
    private boolean isMove; 
    @Override 
    public boolean onTouchEvent(MotionEvent e, MapView mapView) {   
     final int x = (int) e.getX(); 
     final int y = (int) e.getY(); 
     if(e.getAction()==1){ 
      if(!isMove){ 
       geopoint = mapView.getProjection().fromPixels(x, y); 
       OverlayItem overlayItem = new OverlayItem(geopoint, "Title", "Description"); 
       if(mapOverlay.m_overlays.size()>=1){ 
        mapOverlay.clearOverlayAll(); 
       } 
       mapOverlay.addOverlay(overlayItem); 
       if(!mapView.getOverlays().contains(mapOverlay)) 
        mapView.getOverlays().add(mapOverlay); 

       mapView.invalidate(); 
       Toast.makeText(SimpleMapMarkerActivity.this, "in press", Toast.LENGTH_SHORT).show(); 
      }else{ 
       Toast.makeText(SimpleMapMarkerActivity.this, "out press", Toast.LENGTH_SHORT).show(); 
      } 
     }else if(e.getAction()==MotionEvent.ACTION_DOWN) 
      isMove = false; 
     else if(e.getAction()==MotionEvent.ACTION_MOVE) 
      isMove = true; 

     return super.onTouchEvent(e, mapView); 
    } 
} 
+0

Я думаю, что есть небольшой недостаток в вашем onTouchEvent (..), как вы возвращаетесь всегда super.onTouchEvent (..). Как указано в документации, вы должны вернуть true, если вы обрабатываете событие touch, тогда как реализация по умолчанию делает не что иное, как возвращает false. – harism

+0

Я постараюсь вернуть true, но перемещение карты было остановлено – Pratik

+1

Совершенно очевидно, что да, если вы отслеживаете весь жест касания от ACTION_DOWN до ACTION_UP. Есть также событие Overlay.onTap (..), вы считали, что используете его для добавления маркеров? – harism

ответ

0

Я получил решение и это решение дается harism

Всякий раз, когда вы просто реализовать маркер с карту так же, как на карте, и отобразить рынок, а затем реализовать onTap(GeoPoint g, MapView mapview).

И если вы хотите реализовать маркер, например, перемещение пользователем, например, перетаскивание, а затем реализовать с помощью onTouch(). Для onTouch() и перемещение маркера, как перетаскивание проверить эту ссылку

http://www.edumobile.org/android/android-apps/mapmarkerexample/

0

У меня была такая же проблема. Я не уверен, может ли он решить вашу проблему с htc. Но вот что я сделал:

Я переопределил dispatchTouchEvent. Он работает на моей Samsung Galaxy s2.

@Override 
public boolean dispatchTouchEvent(MotionEvent ev) { 
    // TODO Auto-generated method stub 
    if(ev.getAction() == MotionEvent.ACTION_DOWN){ 
     xPos = ev.getX(); 
     yPos = ev.getY(); 
    } 
    if (ev.getAction() == MotionEvent.ACTION_UP){ 
     if (xPos==ev.getX() && yPos == ev.getY()){ 
     Log.i(LOG_TAG, "Calling onTouch from dispatchTouchEvent."); 
      onTouch(mapView, ev); 
     } 
    } 
    return super.dispatchTouchEvent(ev); 
} 

Я делаю это на карте. не в overLay.

0

MapMarkerExample

Этот пример показывает вам, как рисовать подвижный маркер на карте. Вы можете дрочить и опустить маркер, чтобы изменить свое положение. Может использоваться в любом приложении, где u хочет принимать данные от пользователя для определения местоположения карты.

Алгоритм:

1.) Создайте новый проект File-> New -> название Android Project она MapMarkerExample. 2.) Вы увидите код по умолчанию в файле манифеста main.xml и android. 3.) Добавить разрешение Интернет для вашего файла манифеста или записи в следующем android.manifest файле:

http://www.edumobile.org/android/android-apps/mapmarkerexample/

+0

У меня есть этот пример, но неудача с этим также – Pratik