2012-12-12 3 views
0

다음은 달성하려는 내용을 요약 한 것입니다. MotionEvent를 수신하는 뷰가 있습니다. 특정 조건과 일치하면 해당 MotionEvent를 GridView에 전달하여 스크롤하려고합니다. 나는GridView에 MotionEvent 전달

if (event.getAction() == MotionEvent.ACTION_MOVE) { 
    if (condition match) { 
     getGridView().dispatchTouchEvent(event); 
    } 
} 

같은 일을하고 있어요하지만 내 그리드가 MotionEvent에 따라 스크롤하지 않습니다. 어쩌면 그 종류의 이벤트를 듣지 않고 있지만 "ScrollEvent"가 없기 때문에 나는 모른다.

아무도 그것에 대해 나를 밝혀 줄 수 있습니까? 나는 도움이되는 의사를 찾지 못했습니다. 감사합니다.

답변

0

모션 이벤트를 처리하려면 뷰가 해당 동작과 관련된 모든 이벤트 집합을 가져와야합니다.

예를 들어, 스크롤은 MotionEvent.ACTION_DOWN으로 시작해야하고 그 다음에 여러 개의 MotionEvent.ACTION_MOVE이 표시되고 MotionEvent.ACTION_UP으로 끝나야합니다. 이러한 이벤트 중 하나만을 전달할 수는 없으며보기가 스크롤 이동을 디코딩 할 수 있도록 전체 세트를 전달해야합니다.

감사합니다.

0

루이스가 그리드보기가 스크롤되지 않는 이유를 설명했습니다. 사실 그러한 파견은 정확하지 않습니다. 보기 A의 MotionEvent를보기 B에 전달하려고합니다. 그러나 모션의 x와 y는보기와 관련이 있으며 다른보기에서 직접 사용할 수 없습니다. ViewGroup.dispatchTouchEvent()의 소스 코드를 살펴보면 ViewGroup은 모션이 자식으로 전달되기 전에 모션을 변형합니다. 보기 B가보기 A의 자식이면, 디스패치 메커니즘을 변경하는 대신 onInterceptTouchEvent()를 사용하여 동작을 가로 챕니다.

+0

답변을 주셔서 감사합니다. 질문에 -1을 한 사람은 검색을했습니다. 내 정보와 다음 질문의 기술을 높이기 위해 왜 당신이 -1ed인지 설명 할 수 있습니다. 질문은 분명합니다, 나는 단지 잘못된 접근법을 취했고, 그것이 정확하지 않기 때문에, 나는 내가 원하는 것을 얻기위한 조언을 찾을 수 없었습니다. – Mostrapotski