마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

ViewPager2 중첩 스크롤

0 추천

현재 Activity 내에서 ViewPager2 layout을 만들고, ViewPager 내에는 cropme 라는 이미지를 Crop 할 수 있는 라이브러리를 사용해서 레이아웃을 구성했습니다.

activity_crop.xml

    
<androidx.viewpager2.widget.ViewPager2
            android:id="@+id/vp_Images"
            android:layout_width="0dp"
            android:layout_height="0dp"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintDimensionRatio="3:4"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@id/blank"
            android:touchscreenBlocksFocus="true"/>

layout_cropme.xml



    <com.takusemba.cropme.CropLayout
        android:id="@+id/cl_CropImage"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_marginStart="16dp"
        android:layout_marginEnd="16dp"
        app:cropme_background_alpha="80%"
        app:cropme_frame_height_percent="75%"
        app:cropme_frame_width_percent="100%"
        app:cropme_max_scale="2.0"
        app:cropme_overlay_shape="rectangle"
        app:cropme_with_border="true"
        app:layout_constraintDimensionRatio="3:4"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        />

</androidx.constraintlayout.widget.ConstraintLayout>

이렇게 구현한 후 이미지를 선택하여 viewpager에게 넘기면,

viewpager에서는 cropme layout에 이미지를 로드하고, 이벤트 발생 시 이미지를 원하는 사이즈로 자를 수 있게 해주는 것입니다.

여기서 발생한 문제가 viewPager도 가로방향으로 스크롤을 지원하고 있고,

cropme layout도 가로, 세로 방향으로 스크롤을 지원하고 있어 

사진을 원하는 크기로 자를 때는 cropme layout 내의 사진이 움직여야하고, 

다음장으로 이동을 원할 때는 viewPager가 이동을 해야하는데,

자식에게 우선적으로 터치를 적용하고 싶은데 그게 안됩니다...

인터넷에 나와있는 

android:nestedScrollingEnabled="true"

를 해줘라...viewPager를 MestedScrollableHost로 감싸라 등등 많은 방법을 해보았지만 안되네요...

자식레이아웃, 그러니까 cropme 레이아웃을 터치하는 것을 우선적으로 처리하는 방법이 있을까요?ㅠㅠ

hand (1,150 포인트) 님이 2022년 10월 12일 질문

1개의 답변

0 추천
 
채택된 답변
아래 api 한번 시도해 보시죠.
myViewPager2.setUserInputEnabled(false)
spark (227,530 포인트) 님이 2022년 10월 12일 답변
hand님이 2022년 10월 13일 채택됨
해당 코드로 viewPager에는 스와이프가 안되도록 하고 하단에 이전과 다음이라는 버튼을 두어 버튼을 터치했을 때 다음 페이지로 넘어가도록 구현해봤는데도 croplayout에서의 터치가 뚝뚝 끊기더라구요
제가 간단하게 테스트 해보면 터치가 뚝뚝 끊기는 증상이 없는데요. 아마도 님이 사용하시고 계시는 Layout과 관련이 있을 수도 있구요. 참고로 저는 RecyclerView.Adapter를 ViewPager2에 연결해서 테스트 했어요.
저도 지금 RecyclerView.Adapter를 ViewPager2에 연결해서 구현했고, Adapter 내에서 cropmeLayout을 바인딩해서 onBindViewHolder() 내에서 이미지를 넣어주었습니다. 근데 한장일땐 괜찮은데, 여러장이거나, cropmeLayout 내에서 확대의 경우 괜찮은데, 축소를 하면 그때부터 포커스가 cropmeLayout 이 아닌 ViewPager로 가는지 터치가 ViewPager가 먼저 먹드라구요... 인터넷에 더 찾아보니 터치이벤트에서 딥하게 설정하는 방법이 있던데 그건 좀 힘들 것 같아서 ViewPager를 사용하는 것이 아닌, 버튼을 통해 이전 사진과 다음 사진을 cropmeLayout에 배치해주는 방법으로 변경하였습니다.. 그래도 spark님이 도움주시려 노력한 점 정말 감사하게 생각하고 있습니다! 감사합니다 spark님!!
...