Событие OnTap () на карте не запускается - PullRequest
0 голосов
/ 13 июня 2011

Здравствуйте, я не могу запустить событие ontap ()

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

до сих пор я дошел до этой точки .. кто-нибудь может сказать мне, где я иду не так !! заранее спасибо

Исходный код

public class GetLocation extends MapActivity  implements OnClickListener {

MapView mapView;

    MapController mc;

    GeoPoint p;
    int range;
    String category;
    Button view, traffic;
    private static final String Tag = "GetLocation class";
    ZoomControls zoomControls;
    Canvas canvas;
    MapOverlay itemizedoverlay;
    List<Overlay> mapOverlays;

     public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            Log.d("Tag","Inside onCreate");
            setContentView(R.layout.main);
            mapView = (MapView) findViewById(R.id.myMapView1);
            LinearLayout zoom = (LinearLayout)findViewById(R.id.zoom); 
            mapView.setReticleDrawMode(
                    MapView.ReticleDrawMode.DRAW_RETICLE_UNDER);
         //   Drawable drawable = this.getResources().getDrawable(R.drawable.mark);
            view=(Button)findViewById(R.id.BtnView);
            traffic=(Button)findViewById(R.id.BtnTraffic);
            Bundle extra=getIntent().getExtras();
            if(extra != null)
            {
                category=extra.getString("category");
                range=extra.getInt("range");
            }
            view.setOnClickListener(this);
            traffic.setOnClickListener(this);
            zoomControls = (ZoomControls) findViewById(R.id.zoomcontrols);
            zoomControls.setOnZoomInClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        mc.zoomIn();
                    }
            });
            zoomControls.setOnZoomOutClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        mc.zoomOut();
                    }
            });
            mapOverlays = mapView.getOverlays();
            Drawable drawable = this.getResources().getDrawable(R.drawable.mark);
            itemizedoverlay = new MapOverlay(drawable,this);
            mc = mapView.getController();
            mapView.invalidate();
            mc.setZoom(17); 
            mapView.invalidate();
        //    mapView.setSatellite(true);
            mapView.setStreetView(true);
         //   mapView.setOnClickListener(this);
            Log.d("Tag","Exit onCreate");
        }
    class MapOverlay extends com.google.android.maps.ItemizedOverlay<OverlayItem>
    {

        private ArrayList<OverlayItem> mOverlay = new ArrayList<OverlayItem>();
        private Context mContext;
        private boolean  isPinch = false;
        public MapOverlay(Drawable defaultMarker,Context context) {
            super(boundCenterBottom((defaultMarker)));
            mContext = context;
            // TODO Auto-generated constructor stub
        }


        public void addOverlayItem(OverlayItem overlayItem)
        {

            if(!mOverlay.contains(overlayItem)){

                mOverlay.add(overlayItem);
            }

           populate();

        }


        @Override
        protected OverlayItem createItem(int i) {
            // TODO Auto-generated method stub
            return null;
        }
        @Override
        public int size() {
            // TODO Auto-generated method stub
            return mOverlay.size();
        }
        public boolean onTap(GeoPoint p, MapView map)
        {
            if ( isPinch )
            {
                Log.i("onTap","in if!");
                return false;
            }
            else
            {
                Log.i("onTap","TAP!");
                if ( p!=null )
                {
                     OverlayItem overlayitem = new OverlayItem(p," ", " ");

                    itemizedoverlay.addOverlayItem(overlayitem);
                     mapOverlays.add(itemizedoverlay);
                     Toast.makeText(getBaseContext(), 
                             p.getLatitudeE6() / 1E6 + ",on Tap" + 
                             p.getLongitudeE6() /1E6 , 
                             Toast.LENGTH_SHORT).show();
                     Log.d("Tag","Exit TAp");
                    return true;            // We handled the tap
                }
                else
                {
                    return false;           // Null GeoPoint
                }
            }
        }
}

Ответы [ 3 ]

0 голосов
/ 13 июня 2011

Посмотрите на эту статью: http://mobiforge.com/developing/story/using-google-maps-android Он имеет часть под названием «Добавление маркеров»

Кроме того, здесь у вас есть еще один более продвинутый пример: https://github.com/commonsguy/cw-advandroid/blob/master/Maps/NooYawkTouch/src/com/commonsware/android/maps/NooYawk.java

Надеюсь, это поможет вам.

0 голосов
/ 01 ноября 2011

функция при нажатии в itemizedoverlay в основном срабатывает, когда пользователь нажимает на маркер

, чтобы создать класс, расширяющий оверлей для обнаружения касаний.проверьте это пример оверлеев

0 голосов
/ 13 июня 2011

это мой код, надеюсь, вы можете получить представление

Point p1=new Point(0,0);
mapView.getProjection().toPixels(mapPoint, p1);// mapPoint is GeoPoint object
inDrag=item;  // item get from List object and inDrag is an OverlayItem object
items.remove(inDrag); items is list object
populate();
GeoPoint pt=mapView.getProjection().fromPixels(p1.x+xDragImageOffset,p1.y);
OverlayItem toDrop=new OverlayItem(pt, inDrag.getTitle(),inDrag.getSnippet());
items.add(toDrop);
populate();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...