1

現在、MapView を使用して Google マップをユーザーに表示するアプリがあります。

このコードを使用して地図上にマーカーを配置しようとしていますが、

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;
    }

マップ上にマーカーを配置するデモ オーバーレイをセットアップしましたが、画面に触れてもマーカーが表示されません。

どんな助けでも大歓迎です!!!

4

5 に答える 5

2

これは、マップに複数のマークを配置するための完全な例です。

また、2つのピンの間にパスを描画する方法...

それはあなたに役立つかもしれません...

于 2012-04-08T08:57:51.000 に答える
2

android-mapviewballoonsは、Android 向けの最高のマップ ライブラリの 1 つです。試してみませんか?:)

Android マップビュー バルーン

于 2012-04-08T05:51:17.383 に答える
2

コードを次のように変更します---

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;
}        

オーバーレイ クラスを作成します--

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();
       }

    }

画面をタッチするとポイントが表示されます。

于 2012-04-10T09:09:27.400 に答える
2
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);

ontouch メソッドで上記のコードを使用し、以下の CustomItemizedOverlay.java クラスも使用します

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();
    }

}
于 2012-04-08T03:21:07.987 に答える
0

提案に感謝しますが、必要なものを正確にカバーしているため、これらのチュートリアルに従うことにしました http://thenewboston.org/watch.php?cat=6&number=133

特にこのビデオは、私の質問をカバーするものです。

http://thenewboston.org/watch.php?cat=6&number=141

于 2012-04-08T11:56:51.547 に答える