1

私は MapsForge の最新ブランチ (マスター) を使用しており、マーカーの onTap イベントを実装したいと考えています。0.3.0 では可能だったと思いますが、マップ上のマーカーごとに異なる Drawable を使用するため、0.3.0 は使用できません。

ArrayList<Monument> monuments = getMonuments(); 

mListOverlay = new ListOverlay();
ArrayList<OverlayItem> markers = new ArrayList<OverlayItem>();          

for(Monument m : monuments){
    GeoPoint gp = new GeoPoint(m.getLat(), m.getLon());
    Marker m = createCustomMarker(R.drawable.marker, gp, p.getNumber()));
    markers.add(m);     
}

mListOverlay.getOverlayItems().addAll(markers);

mMapView.getOverlays().add(mListOverlay);

"createCustomMarker" は、上に数字がある Drawable を使用するマーカーを返します。

タップされたときに「m」の動作をオーバーライドする方法を知っている人はいますか?

覚えておいてください:支店長!0.3.0ではありません!!

ありがとう

4

2 に答える 2

10

以下の方法で、Marker を継承して onTab を上書きするクラスを作成します。このソリューションは、タブがレイヤーのビットマップの境界内 (プラス 10%) にあるかどうかを確認します。これが true の場合、Runnable アクションが呼び出されます。

Mapsforge では、各マーカーはマップの上に積み重ねられた単純なレイヤーです。各タブは、最上位レイヤーの ontab を呼び出します。それが false を返す場合、関数が true を返すか、最後のレイヤーに達していない限り、次の最上位レイヤーの ontab が呼び出されます。

public class InfoMarker extends Marker {

    private Runnable action;

    public InfoMarker(LatLong latLong, org.mapsforge.core.graphics.Bitmap bitmap, int horizontalOffset, int verticalOffset) {
        super(latLong, bitmap, horizontalOffset, verticalOffset);
    }


    public void setOnTabAction(Runnable action){

        this.action = action;
    }

    @Override
    public boolean onTap(LatLong tapLatLong, Point layerXY, Point tapXY) {


        double centerX = layerXY.x + getHorizontalOffset();
        double centerY = layerXY.y + getVerticalOffset();

        double radiusX = (getBitmap().getWidth() / 2) *1.1;
        double radiusY = (getBitmap().getHeight() / 2) *1.1;


        double distX = Math.abs(centerX - tapXY.x);
        double distY = Math.abs(centerY - tapXY.y);


        if( distX < radiusX && distY < radiusY){

            if(action != null){
                action.run();
                return true;
            }
        }


        return false;
    }

}
于 2014-06-11T14:53:18.267 に答える
1

関係者の方へ、私は最終的に私のニーズを簡単にカバーできる OsmDroid に切り替えました。

onTap の場合、基本的に行ったことは次のとおりです。

http://mobiledevstories.wordpress.com/2014/03/01/osmdroid-bonus-pack-markers-with-clickable-infowindows/

誰かの時間を節約できることを願っています!

于 2014-03-01T12:45:42.743 に答える