浜松のWEBシステム開発・スマートフォンアプリ開発・RTK-GNSS関連の開発はお任せください
株式会社シーポイントラボ
TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:静岡県浜松市中区富塚町1933-1 佐鳴湖パークタウンサウス2F

【Android】ScrollViewの中に設置したMapViewをドラッグで操作する

タイトル通り、Android アプリで ScrollView のページ内に設置した MapView をドラッグで操作できるようにする方法についてです。
というのも、ScrollView の中に MapView などのスクロールできる要素を置いてしまうと、MapView を操作しようとしたときに親要素の ScrollView がそのドラッグに反応してしまい、MapView は操作できないという現象が発生します。
今回は、その対処方法についてです。

参考にさせていただいた記事はこちらから。

android – MapView inside a ScrollView? – Stack Overflow
https://stackoverflow.com/questions/6546108/mapview-inside-a-scrollview

 

方法としましては、MapView を継承した CustomMapView クラスを作成し、その中で地図上でドラッグを行った時の処理をオーバーライドします。
サンプルコードは下記のとおりです。

public class CustomMapView extends MapView {
    public CustomMapView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
        switch (ev.getAction()) {
        case MotionEvent.ACTION_UP:
            System.out.println("unlocked");
            this.getParent().requestDisallowInterceptTouchEvent(false);
            break;
        case MotionEvent.ACTION_DOWN:
            System.out.println("locked");
            this.getParent().requestDisallowInterceptTouchEvent(true);
            break;
        }
        return super.dispatchTouchEvent(ev);
    }
}

なお、クラス名は任意の名前でOKです。

あとは、layout ファイルの MapView を、上記のクラスと置き換えます。

<jp.co.cpointlab.xxxx.CustomMapView
    android:id="@+id/mapView"
    android:layout_width="match_parent"
    android:layout_height="400dp" />

修正するのは以上です!
それ以外のコードは、変更する必要はありませんでした。

実際にアプリを実行して動作を確認したところ、ScrollView の中の MapView がドラッグで操作できることを確認できました!
修正前は、ちょこっと動かすとすぐに ScrollView が反応してしまい、マップを操作する事が出来なかったのですが、修正後は何のストレスもなく操作が出来るようになりました。

 

以上、Android アプリで ScrollView の中に配置した MapView をドラッグで操作できるようにする方法についてでした。
ご参考になれば幸いです。

  • この記事いいね! (0)