2

나는 Activity가 SlidingPaneLayout이고, 내부에 두 개의 조각이 있습니다. 왼쪽에는 ListView, 오른쪽에는 MapFragment입니다. 사용자가 패널을 닫지 않고지도를 이동할 수 있도록 생성 된 터치 이벤트를 가로채는 것은 어떻게 가능합니까?터치 이벤트 차단 SlidingPaneLayout

오른쪽 패널을 닫거나 열 때 사용하려는 유일한 영역은 처음 네 번째입니다. 그 지역의 오른쪽에 나는지도를 옮기고 싶다.

감사

EDIT2 :이 코드 I로

@Override 
public boolean onTouchEvent(MotionEvent event) { 
    if (event.getAction() == MotionEvent.ACTION_DOWN 
      && event.getX() > (getWidth()/6)) { 
     return false; 
    } 
    return super.onTouchEvent(event); 
} 

:

좋아, 지금은 제대로 SlidingPaneLayout를 서브 클래 싱하는 방법을 알아 냈어, 지금 문제는 제대로 터치 이벤트를 캡처하는 방법입니다 지도를 슬라이드 할 수 없기 때문에 고정되어 있습니다. 문제는 오른쪽 패널을 선택했을 때 (즉,지도가 표시 될 때만) 터치를 가로 채길 원한다는 것입니다.

답변

2

SlidingPaneLayout은 터치 리스너이므로 setOnTouchListener (Super 클래스 View의 메서드)를 호출하여 재설정하면 SlidingPaneLayout에 관련된 모든 onTouch 비헤이비어가 손실됩니다. 자신의 SlidingPaneLayout합니다 :
생성자는 XML 레이아웃

public class MySlidingPaneLayout extends SlidingPaneLayout{ 

    public MySlidingPaneLayout(Context context, AttributeSet attrs) { 
     super(context, attrs); 

    } 

    @Override 
    public boolean onTouchEvent(MotionEvent event){ 
     if (event.getX() < widthPIX/6) { 
      return super.onTouchEvent(event);// here it works as a normal SlidingPaneLayout 
     } 
     return false; // here it returns false so that another event's listener should be called, in your case the MapFragment listener 
    } 
} 

에서보기를 사용하기 위해 당신의 코드를 추가 MySlidingPaneLayout 대신이 방법을해야 다음

------------------------------- 

는 시도이다

+0

그것을 시도하고 당신이 무엇을 가지고 말해이 –

+0

예는 (그것은 나를 오류를 컴파일 할 권리하지만 슈퍼 클래스 개체 참조하기 때문에 라인 super.onTouchEvent (이벤트) 잘못 제공됩니다 " onTouchEvent (MotionEvent) 메서드는 Object 유형에 대해 정의되지 않았습니다. 아마도 SlidingPaneLayout을 확장 한 다음 onInterceptTouchEvent 메서드를 재정의해야합니다 (이전에 ViewPager로이 작업을 시도했지만 효과가있었습니다). 그러나 이제는 SlidingPaneLayout의 올바른 하위 클래스를 만들 수 없습니다. 다른 예외가 있기 때문입니다. . –

+0

오, 미안 나는 SlidingPaneLayout 클래스를 확장하여 자신 만의 SlidingPaneLayout을 만들었다 고 생각했다. 대답을 편집했다. –

2

마지막으로이 문제를 해결했습니다 : SlidePaneLayout이 닫혀 있는지 또는 열려 있는지 (이 경우에는 부울 fi ELD 값) "열기"

@Override 
public boolean onInterceptTouchEvent(MotionEvent event) { 
    if (!homeActivity.open && event.getX() > (getWidth()/5)) { 
      return false; 
     } 
    return super.onInterceptTouchEvent(event); 
}