프로그래밍/안드로이드+코틀린
PhotoView, ViewPager, java.lang.IllegalArgumentException: pointerIndex out of range 에러
현재 레이아웃은 위와 같으며 구글 광고와, 지도, 메뉴판, 가게정보가 적혀 있는 탭 레이아웃 사이에 뷰페이저가 들어간다. 그리고 메뉴판 탭에서 메뉴판 사진이 들어가는데 그 때 사진을 Zoom in, Zoom out하려고 PhotoView 라이브러리를 사용했다.
PhotoView 라이브러리는 chirsbanes/PhotoView 이 링크를 참고하면 된다.
근데 여기서 뷰페이저와 PhotoView라이브러리를 동시에 사용하게 되면 "java.lang.IllegalArgumentException:java.lang.IllegalArgumentException:" 오류와 "E/InputEventReceiver: Exception dispatching input event." 오류가 뜬다.
Shutting donw VM이라고 하얀 글씨로 적혀 있는데, 이 오류가 뜨면서 어플리케이션이 종료된다.
이 오류는 꽤 오래전부터 있었던 것 같다. PhotoView를 만든 chrisbanes도 readme에 이 오류에 대해 적어놓고 해결방법을 써놨다.
그러나 나는 아래의 해결방법으로 오류를 해결했다.
github.com/chrisbanes/PhotoView/issues/31#issuecomment-19803926
이 링크에서 영문 해결방법이 확인 가능하고 내가 설명한 한글로 보고싶으면 글을 계속 읽으면 된다.
의외로 간단하게 해결되었다.
import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import androidx.viewpager.widget.ViewPager;
public class ViewPagerFixed extends ViewPager {
public ViewPagerFixed(Context context) {
super(context);
}
public ViewPagerFixed(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean onTouchEvent(MotionEvent ev) {
try {
return super.onTouchEvent(ev);
} catch (IllegalArgumentException ex) {
ex.printStackTrace();
}
return false;
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
try {
return super.onInterceptTouchEvent(ev);
} catch (IllegalArgumentException ex) {
ex.printStackTrace();
}
return false;
}
}
새로운 클래스를 하나 만들어준다.
onTouchEvent와 onInterceptTouchEvent로 오류가 나는 것을 방지해준다.
<com.example.menupan.Adapter.Frame.ViewPagerFixed
android:id="@+id/framelayout_viewpager"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
그리고 원래 사용하려고 했었던 ViewPager를 위에서 생성했던 ViewPagerFixed로 변경해준다.
그러면 아무리 Zoom out을 해도 애플리케이션이 강제 종료되지 않는다.
끝까지 읽어주셔서 감사합니다.
궁금한 점이나 틀린 부분이 있다면 댓글로 남겨주세요.
댓글이 달리면 저에게 알림이 와서 바로 확인할 수 있으니 최대한 빠른 시일 내에 답변 드리도록 하겠습니다.
'프로그래밍 > 안드로이드+코틀린' 카테고리의 다른 글
해결방법 :prepareKotlinBuildScriptModel Task fails in a Java project (0) | 2020.11.25 |
---|---|
안드로이드 스튜디오 FrameLayout 뒤 배경 클릭안되게 하는 법 (0) | 2020.08.30 |
이미지 호스팅 서버 추천, 구글은 안좋다 (0) | 2020.08.26 |
장고 서버 외부 접속, 휴대폰망, 다른 컴퓨에서 접속하는 법 ngrok 사용법 (0) | 2020.08.26 |
안드로이드 스튜디오 구글 드라이브 URL을 Drawable로 갖고 오기 (0) | 2020.08.25 |