0

Open Street Maps で動作する HelloGoogleMaps アプリを再現しようとしていますが、OSMdroid に項目別オーバーレイを含めるのに問題があります。

いくつかのリソースを調べましたが、OsmItemizedOverlay のエラーを修正する方法がわかりません - OsmItemizedOverlay を間違って作成しているか、OsmItemizedOverlay と ItemizedOverlay を混同していると思いますか? しかし、私が変更しようとしたものはすべて、より多くのエラーを引き起こしました...「暗黙のスーパーコンストラクター ItemizedOverlay() は定義されていません。別のコンストラクターを明示的に呼び出す必要があります」 - 誰かがクラス定義をまっすぐにするのを手伝ってくれることを願っていますか?

本当にありがとう!

package com.example.osmdroiddemomap;

import java.util.ArrayList;

import android.app.AlertDialog;
import android.content.Context;
import android.graphics.Point;
import android.graphics.drawable.Drawable;

import org.osmdroid.api.IMapView;
import org.osmdroid.views.*;
import org.osmdroid.views.overlay.*;
import org.osmdroid.views.overlay.OverlayItem.HotspotPlace;

public class OsmItemizedOverlay extends ItemizedOverlay<OverlayItem> {

    Context mContext;


    private ArrayList<OverlayItem> mOverlays = new ArrayList<OverlayItem>();

        //ERRORS are raised by the following 3 lines:
    public OsmItemizedOverlay(Drawable defaultMarker, Context context) {
            OverlayItem.setMarker(defaultMarker);
            OverlayItem.setMarkerHotspot(HotspotPlace.CENTER);

          mContext = context; 
            }

public void addOverlay(OverlayItem overlay) {
    mOverlays.add(overlay);
    populate();
}

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

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


  protected boolean onTap(int index) {
  OverlayItem item = mOverlays.get(index);
  AlertDialog.Builder dialog = new AlertDialog.Builder(mContext);
  dialog.setTitle(item.getTitle());
  dialog.setMessage(item.getSnippet());
  dialog.show();
  return true;
}

@Override
public boolean onSnapToItem(int arg0, int arg1, Point arg2, IMapView arg3) {
    // TODO Auto-generated method stub
    return false;
}
}
4

4 に答える 4

0
use following constructor:

  public OsmItemizedOverlay(Drawable defaultMarker, Context context) {
            super(defaultMarker,context);
            mContext = context;
        }

public void addOverlay(OverlayItem overlay) {
    mOverlays.add(overlay);
    populate();
}
于 2014-02-05T04:06:14.737 に答える
0

このようにコンストラクタを変更してみてください

public OsmItemizedOverlay(Drawable defaultMarker, Context context) {
        super(boundCenterBottom(defaultMarker));
        mContext = context;
    }
于 2012-10-11T14:25:39.173 に答える
0

私は osmdroid を使用したことはありませんが、ここのドキュメントを見ると、それはsetMarkerHotspot()の方法として表示され、ここのリンクの説明を入力OverlayItemするのドキュメントには、デフォルトのマーカーは常にボタンの中央揃えであると書かれています。

それを解決するには、追加された各オーバーレイ アイテムにマーカーを割り当て、setMarkerHotspot()中央に設定する必要があります。

このようなものは問題を解決するはずです:

Context mContext; 
Drawable mDefaultMarker;

public OsmItemizedOverlay(Drawable defaultMarker, Context context) { 
      mContext = context;  
      mDefaultMarker = defaultMarker;  
} 

public void addOverlay(OverlayItem overlay) {
    overlay.setMarkerHotspot(HotspotPlace.CENTER);
    mOverlays.add(overlay);   
    populate();   
}  

幸運を。

于 2012-10-11T21:34:34.193 に答える