1

특정 뷰의 위치 변경을 수신 대기해야합니다. 뷰는 목록 뷰 또는 리사이클 러 뷰의 항목 일 수도 있고 스크롤 뷰 또는 중첩 된 스크롤 뷰 등의 하위 항목 일 수도 있습니다. 그러나 뷰의 화면에서 위치가 변경 될 때마다 (예 : x, y 좌표가 업데이트 됨) 알림을 받아야합니다. 나는 뷰의 이동 리스너 설정 방법

view.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { 
     @Override 
     public void onGlobalLayout() { 
      Log.d(TAG, "Layout changed"); 
     } 
    }); 

view.setOnScrollChangeListener(new View.OnScrollChangeListener() { 
     @Override 
     public void onScrollChange(View view, int i, int i1, int i2, int i3) { 
      Log.d(TAG, "Position changed"); 
     } 
    }); 

을 시도하지만 또한 GestureDetectorCompat을 시도

작동하지 않는 것, 그러나 별거,는 x 동안, y 위치는 정확하지 않다.

내 문제의 해결책은 있습니까? 희망이 내 문제는 분명하다. 미리 감사드립니다 !!

+0

실제로 달성하고자하는 내용을 알려주십시오. 왜냐하면 이것이 올바른 방법이 아닌 것 같습니다. –

+0

기본적으로 조회수는 2입니다. 하나는 내 도구 모음이고 다른 하나는 도구 모음 아래의 활동 (또는 단편)에있을 수 있습니다. 따라서이 바닥면이 툴바에 가까워 질 때마다 툴바의 텍스트 및 배경의 강도를 변경해야합니다 (예 : 툴바 제목의 알파를 변경하고 툴바 배경색을 희미하게 변경). 또한 툴바에서 멀어 질 때마다. 그래서 항상이 뷰는 툴바에서 얼마나 먼 거리인지 알 필요가 있습니다. – Drd

+0

또한이보기는 목록보기의 제목이나 일반 선형 레이아웃 등과 같이 화면의 아무 곳에 나있을 수 있습니다. 다른 화면을 기반으로합니다. 내 요구 사항을 이해하는 데 도움이됩니까? – Drd

답변

3

나는 ViewTreeObserver.OnScrollChangedListener 콜백을 사용할 수 있다고 생각합니다. 이것은 뷰 트리의 내용이 스크롤되었을 때 호출되는 콜백입니다. 따라서 이동중인 뷰에 대해이 리스너를 추가하십시오.

view.getViewTreeObserver().addOnScrollChangedListener(new ViewTreeObserver.OnScrollChangedListener() { 
     @Override 
     public void onScrollChanged() { 
      // Do what you want to do when the view has been scrolled 
     } 
    }); 
+0

위대한 !! 이것은 내가 원하는 것입니다. 이제이 콜백을 사용하여 동작을 추적 할 수 있습니다. 감사!! – Drd