0

どういうわけか、マップに追加したアイコンをタップすると、onTap イベントが呼び出されません。マップに追加したすべてのユーザーのオーバーレイで、アイコンは同じですが、タイトルはすべて異なります。しかし、タップしても何も起こらない場合は、Log.d で何かが起こってもログに記録しようとしましたが、何も起こりません。これはコードです:

private class MyUsersOverlay extends ItemizedOverlay<OverlayItem> {
    private List<OverlayItem> mOverlays = new ArrayList<OverlayItem>();

    public MyUsersOverlay(Drawable defaultMarker) {
        super(boundCenterBottom(defaultMarker));
    }

    @Override
    protected OverlayItem createItem(int i) {
        return mOverlays.get(i);
    }

    @Override
    public int size() {
        return mOverlays.size();
    }


    public void addOverlayItem(int lat, int lon, String title, String... message) {
        GeoPoint point = new GeoPoint(lat, lon);
        OverlayItem overlayItem = new OverlayItem(point, title, null);
        addOverlayItem(overlayItem);
    }

    public void addOverlayItem(OverlayItem overlayItem) {
        mOverlays.add(overlayItem);
        populate();
    }


    @Override
    protected boolean onTap(int index)
    {
        Log.d("Test Message", "It works");
        OverlayItem item = mOverlays.get(index);

        //Do stuff here when you tap, i.e. :
        //AlertDialog.Builder dialog = new AlertDialog.Builder(cMainActivity);
        //dialog.setTitle(item.getTitle());
        //dialog.setMessage(item.getSnippet());
        //dialog.show();

        Toast.makeText(cMainActivity, item.getTitle(),
                Toast.LENGTH_SHORT).show();

        return true;
    }

    @Override
    public void draw(android.graphics.Canvas canvas, MapView mapView, boolean shadow)
    {
        super.draw(canvas, mapView, shadow);

        if (shadow == false)
        {
            //cycle through all overlays
            for (int index = 0; index < mOverlays.size(); index++)
            {
                OverlayItem item = mOverlays.get(index);

                // Converts lat/lng-Point to coordinates on the screen
                GeoPoint point = item.getPoint();
                Point ptScreenCoord = new Point() ;
                mapView.getProjection().toPixels(point, ptScreenCoord);

                //Paint
                Paint paint = new Paint();
                paint.setTextAlign(Paint.Align.CENTER);
                paint.setTextSize(10);
                paint.setARGB(150, 0, 0, 0); // alpha, r, g, b (Black, semi see-through)

                //show text to the right of the icon
                canvas.drawText(item.getTitle(), ptScreenCoord.x, ptScreenCoord.y+10, paint);
            }
        }
    }
4

3 に答える 3

0

メソッドを忘れずに入れmapView.setClickable(true);ましたoncreate()か?

于 2012-11-12T10:49:43.603 に答える
0

問題は上記のコードではなく、別の場所にあります。touch「 ItemizedOverlay」からイベントを盗む別のビューがあります。

Possibilities

  • dispatchTouchEvent()マップ アクティビティで遊んでいてtrue、常に戻ってきて、イベントが使用されており、それ以上のディスパッチが発生しないことを通知している可能性があります。
  • を定義するレイアウトでは、ビューを部分的にカバーしたMapView後にビューを追加した可能性があります。MapViewモーション イベントは、最後に追加されたビューからディスパッチされます。
  • MapViewを覆っている別のオーバーレイを追加した可能性がありItemizedOverlayます。
于 2012-11-12T11:52:20.897 に答える
0

オーバーレイをクリックし、一般的なマップビューをクリックするためのイベントがある場合、これは問題になる可能性があります。それがあなたが達成しようとしているものなら、このチュートリアルをチェックしてください。別の問題が発生している場合でも、チュートリアルが問題の解決に役立つ場合があります。

于 2012-11-12T10:53:45.797 に答える