본문 바로가기
안드로이드 코드

안드로이드) 스크롤뷰 안에 구글지도

by 우딬 2020. 9. 23.

카카오지도에 이에 2편 구글지도를 스크뷰에 뺏기지 않으려면 어떻게 해야할까?

 

카카오지도는 Fragment안에 지도를 첨부하고 있습니다.

 

xml부터 보시죠.

 

 <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/main_scrollview"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
	 <fragment xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:tools="http://schemas.android.com/tools"
            android:id="@+id/mapFragmentResto"
            android:name="com.google.android.gms.maps.SupportMapFragment"
            android:layout_width="match_parent"
            android:layout_height="250dp"
            android:layout_margin="5dp"
            tools:context="com.deltatechnepal.foodpal.RestoDetailActivity">
            <ImageView android:id="@+id/ivMapTransparent"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:src="@android:color/transparent" />
        </fragment>
</ScrollView>

fragment에 구글 지도가 나올것입니다.

 

카카오는 Layout에 지도를 보여주기 때문에 그 Layout이 직접 터치를 뺏기지 않도록 코드를 적는게 가능하지만,

 

구글 같은경우는 그게 되지 않습니다.

 

그리하여 fragment아래의 ImageView를 활용하여, 터치를 뺏기지 않도록 유도하는 것 입니다.

 

 

SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
        .findFragmentById(R.id.mapFragmentResto);
mapFragment.getMapAsync(this);
 
final ScrollView svRestoDetail = (ScrollView) findViewById(R.id.svRestoDetail);
ImageView ivMapTransparent = (ImageView) findViewById(R.id.ivMapTransparent);
ivMapTransparent.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        int action = event.getAction();
        switch (action) {
            case MotionEvent.ACTION_DOWN:
                // Disallow ScrollView to intercept touch events.
                svRestoDetail.requestDisallowInterceptTouchEvent(true);
                // Disable touch on transparent view
                return false;
 
            case MotionEvent.ACTION_UP:
                // Allow ScrollView to intercept touch events.
                svRestoDetail.requestDisallowInterceptTouchEvent(false);
                return true;
 
            case MotionEvent.ACTION_MOVE:
                svRestoDetail.requestDisallowInterceptTouchEvent(true);
                return false;
 
            default:
                return true;
        }
    }
});

 

이미지뷰에 setOnTouchListener를 추가하여 메인 스크롤에 터치를 뺏기지 않도록 하는 코드입니다.

 

그럼 구글지도 문제없이 사용하실 수 있습니다.

 

댓글