ViewDragHelper 빈 포인터 예외 노트
4630 단어 빈 포인터ViewDrapHe
실제 프로젝트에서 View Group의 서브뷰가 사용자의 손가락을 드래그하면 그에 상응하는 변화가 발생할 수 있다. 예를 들어 손가락을 드래그하면 움직이는 등이다. 그러나 온터치 이벤트와 온터치 이벤트 처리는 비교적 번거롭고 오류가 발생하기 쉽기 때문에 구글은 ViewDrapHelper 클래스를 제공하여 support-v4 패키지에 위치한다.이 종류는 개발자가 쉽게 사용할 수 있도록view 동작을 드래그합니다.
ViewDrapHelper의 생성 및 사용
ViewDrapHelper 사례 코드를 만듭니다.
ViewDragHelper dragHelper = ViewDragHelper.create(ViewGroup forParent, Callback cb)
ViewDrapHelper를 만들 때 ViewGroup 대상과 서브뷰가 사용자의 손가락을 드래그하는 데 반응하는 콜백 대상을 전달해야 합니다.
Callback 클래스 일반 방법
// child ( )
public boolean tryCaptureView(View child, int pointerId)
// child , child ( ) ,
public int getViewHorizontalDragRange(View child)
public int getViewVerticalDragRange(View child)
// child , left=child.getLeft()+dx
public int clampViewPositionHorizontal(View child, int left, int dx)
public int clampViewPositionVertical(View child, int top, int dy)
// view ,dx dy : view changedView
public void onViewPositionChanged(View changedView, int left, int top,int dx, int dy)
// view
:releasedChild
public void onViewReleased(View releasedChild, float xvel, float yvel)
또한 ViewDrapHelper는 Scroller에 대한 패키지 사용 사례 코드를 제공합니다.
viewDrapHelper.smoothSlideViewTo(View child, int finalLeft, int finalTop)
@Override
public void computeScroll() {
super.computeScroll();
if (dragHelper.continueSettling(true)) {
ViewCompat.postInvalidateOnAnimation(SwipLayout.this);
}
}
빈 포인터 예외
ViewDrapHelper를 사용할 때 ViewGroup의 onTouchEvent와 onInterceptTouchEvent 두 가지 방법을 다시 쓰고 이 두 가지 방법에서viewDrapHelper를 호출해야 합니다.프로세스 터치 이벤트(event)와viewDrapHelper.shouldInterceptTouchEvent(ev), 빈 바늘 이상이 발생하는 것은 이 두 방법 중 MotionEvent 이벤트를viewDrapHelper에게 전달하지 않은 방법을 만져보는 것이다.오류 코드:
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
if (XXXXX) {
return true;
}
return viewDrapHelper.shouldInterceptTouchEvent(ev);
}
오류 분석, onIntercept Touch Event 방법에서 차단 이벤트를 처리할 때 조건 XXXXX가 성립되지 않을 때만view DrapHelper Motion Event 이벤트에 전달됩니다. 그렇지 않으면view DrapHelper는 처리 이벤트를 가져올 수 없습니다.ontouchevent 방법에서view DrapHelper를 호출합니다.프로세스 터치 이벤트 메서드는 빈 포인터 이상을 보고합니다.
올바른 코드:
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
boolean res = dragHelper.shouldInterceptTouchEvent(ev);
if (XXXXX) {
res = true;
}
return res;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
ViewDragHelper 빈 포인터 예외 노트ViewDrapHelper 소개 실제 프로젝트에서 View Group의 서브뷰가 사용자의 손가락을 드래그하면 그에 상응하는 변화가 발생할 수 있다. 예를 들어 손가락을 드래그하면 움직이는 등이다. 그러나 온터치 이벤...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.