1

私は現在OSMdroidを使用しています。
マップ上の特定のポイントを (タッチ スクリーンで) マークできるようにしたいと考えています。
最初のオプションは、長いクリックを使用することです。問題は、システムがスクロールを長いクリックとして認識することです。2 番目のオプションは、ダブル タブを使用することです。これは、ズーム レベルを変更する効果があります。

長いクリックとスクロールを区別できるようにしたい。これを行う簡単な方法はありますか?

次のリンクにいくつかの提案があります:
ただし、これらの提案が OSMdroid で実装できるかどうかはわかりません。

前もって感謝します!

アリエル

4

2 に答える 2

0

OsmMap にタッチ機能を追加したいと思ったとき、タップやスクロールなどが既に使用されていることもわかりました。

そのため、すべてのジェスチャーを開始するには 3 本の指で長押しする必要があるようにしました。ジェスチャは、3 本の指で長押ししてから左右にスライドするか、3 本の指で長押ししてから上に上げます。そうすれば、私のジェスチャーは法線マップのジェスチャーに干渉しませんでした。

私のアプリは、3 本指の長押しを検出した後、タッチ イベントも消費する必要がありました。そうしないと、osm ジェスチャーと私のジェスチャーが競合し、奇妙なスクロールとズームが発生します。

Overlayこれには、次のような特別なコードを追加する必要があります。

@Override
public boolean onTouchEvent(MotionEvent event, MapView mapView)
{
    boolean detected = false;
    if (myGestureDetector.onTouchEvent(event))
    {
        detected = true;
    }

    if (myGestureDetector.isTouchEventActive())
    {
        Log.d(D_LOG, "TOUCH EVENT ACTIVE DRAIN IT");
        detected = true;
    }

    return detected;
}
于 2012-10-31T17:21:54.807 に答える
0

このメソッドでは、単一のタッチ イベントしか許可されないことに注意してください。

あなたの活動はimplements MapEventsReceiver.

MapEventsOverlay次に、Aをマップに追加する必要があります。

//Handling Map events
MapEventsOverlay mapEventsOverlay = new MapEventsOverlay(this, this);
map.getOverlays().add(0, mapEventsOverlay); //inserted at the "bottom" of all overlays

OSMDroidBonus Pack チュートリアルに記載

于 2015-07-03T09:49:27.890 に答える