dispatchTouchEvent () 반환 값 문제
1620 단어 스스로 잘못된 집합에 부딪히다
dispatchTouch ()가true로 되돌아오면 move, up 제스처가 실행되고,false로 되돌아갈 때down 이벤트가 한 번만 실행됩니다.
소스에 따라:
if (mFirstTouchTarget == null) {
// No touch targets so treat this as an ordinary view.
handled = dispatchTransformedTouchEvent(ev, canceled, null,
TouchTarget.ALL_POINTER_IDS);
}
... 해야 한다
if (dispatchTransformedTouchEvent(ev, false, child, idBitsToAssign))
중위false일 때 mFirstTouchTarget가null이면handled의 값은 자신의 onTouchEvent () 방법에 의해 결정됩니다.
테스트 (1):
가장 바깥쪽의layout1(ViewGroup에서 상속됨) 차단 이벤트, 즉
onInterceptTouchEvent()
true의 경우 소스에 따라 하위 View에서 OnTouchevent () 이벤트를 실행하지 않습니다.
이 조건에서 layout1의 OnTouch Event () 이벤트가true로 되돌아오고 원본에 따라 OnTouch Event () 이벤트가true로 되돌아올 때 슈퍼입니다.dipatchTouchEvent () 는true를 되돌려줍니다. 즉, 모브, up을 되돌려줍니다.
테스트 (2):
장면:layout1(ViewGroup)에 중첩된 layout2(ViewGroup)에 MyView(View)를 네스트합니다.
layout_1 및 layout2의
onInterceptTouchEvent()
false로 돌아가면 차단하지 않음을 표시하고 MyView의 OnTouchEvent ()는true로 돌아가면 myView의 OnTouchEvent만 실행합니다. 원본에 따라: 하위 View 응답 이벤트가 있을 때
if (mFirstTouchTarget == null) {
// No touch targets so treat this as an ordinary view.
handled = dispatchTransformedTouchEvent(ev, canceled, null,
TouchTarget.ALL_POINTER_IDS);
}
이 줄 코드는 실행되지 않기 때문에 슈퍼.dispatchTouchEvent () 는 실행되지 않으며, 레이아웃의 OnTouchEvent () 방법도 실행되지 않습니다.현재 이 몇 가지 방법 중의returntrue나false에 대해서는 아직 잘 모르겠다.