0

アプリにマップビューがあり、すべてが touchEvents でうまく機能しています。

ただし、アプリのユーザーシップを最大化するために、トラックボール インターフェイス機能も追加しようとしており、問題が発生しています。

トラックボールは、フォーカスがあるときに mapView を適切にスクロールしますが、ユーザーがオーバーレイ アイテムの中心にいるときに onTap イベントを発生させることができません。

マウス ボタンをクリックして (エミュレーターを使用しています)、トラックボール ユーザー (F6 を使用したトラックボール) によるクリックをシミュレートすると、何も起こりません.. onTrackBallEvent コードは、この状況では発生しません。このインスタンスでは onTap が起動されるはずですが、起動されません。

overlayItem を中心としていない場合、onTrackBallEvent で ACTION_DOWN および ACTION_UP イベントを取得します。onTrackBallEvent が発生しないのは、マップが OverlayItem を中心としている場合のみです。残念ながら、onTap イベントも発生しません。明らかに、オーバーレイが画面の中央の下にあり、ユーザーがトラックボールをクリックしたときに、OS がこれらのクリックで何かを行っていますが、それが何であるかを理解できれば、気が遠くなるでしょう。

私が探しているイベントを知っている人はいますか?

4

3 に答える 3

1

これはかなり古い問題ですが、私は 2 セントを与えると考えました。何らかの理由で、onTap() オーバーライドがクリックした場所に他のオーバーレイを追加する前に、地図上のどこかにオーバーレイを追加する必要があります。私が使用した:

public boolean onTap(GeoPoint p, MapView mapView) {
    boolean tappedAnOverlay = super.onTap(p, mapView);
    if (tappedAnOverlay) {
        // do your thing if hit an overlay
    }
    else {
        // no overlay found in that location
    }

    MapController mc = mapView.getController();
    mc.animateTo(p);

    return true;

} 
于 2012-09-18T22:02:42.173 に答える
0

それはこれで動作するからです。画面上のヒットポイントがオーバーレイアイテムと一致するかどうかを確認します。

        public boolean onTouchEvent(MotionEvent event, MapView mv) {
        final int action=event.getAction();
        final int x=(int)event.getX();
        final int y=(int)event.getY();

        if(!this.marker.equals(getResources().getDrawable(R.drawable.parada))){
            if (action == MotionEvent.ACTION_DOWN) {
                        for (OverlayItem item : mItems) {
                        Point p = new Point(0,0);                       
                        mv.getProjection().toPixels(item.getPoint(), p);                        
                        if (hitTest(item, marker, x-p.x, y-p.y) && item.getSnippet()!= "parada") {
于 2011-05-23T13:43:04.130 に答える
0

これをお試し下さい。これは、マップ ビューに複数のオーバーレイを表示するために使用されます。問題が解決する可能性があります: https://github.com/donnfelker/android-mapviewballoons

于 2011-05-24T06:29:55.443 に答える