두 개의 스크롤 위치를 동기화해야합니다. ScrollViews
.RelativeLayout 내에서 두 ScrollViews의 스크롤 동기화
두 ScrollViews
에는 각각 RecyclerView
이 포함되어 있습니다 (디자인 요구 사항으로 인해 동일한 ScrollView에 넣을 수 없습니다).
어떻게하면됩니까?
두 개의 스크롤 위치를 동기화해야합니다. ScrollViews
.RelativeLayout 내에서 두 ScrollViews의 스크롤 동기화
두 ScrollViews
에는 각각 RecyclerView
이 포함되어 있습니다 (디자인 요구 사항으로 인해 동일한 ScrollView에 넣을 수 없습니다).
어떻게하면됩니까?
은 내가보기 엔 당신이 당신의 디자인을하지만 첫번째 스크롤 뷰에 대해이
을 달성하는 방법이, Y 두 변수 x를 정의하고 현재 스크롤 위치
x = firstScrollView.getScrollX();
y = firstScrollView.getScrollY();
를 얻을이 통과하는 것이 좋습니다 값을 다른 scrollView "scrollTo"메서드에 전달합니다.
같은 : 쉽게 이벤트를 스크롤 듣고 우리를 수 있기 때문에 모든
secondScrollView.post(new Runnable() {
@Override
public void run() {
secondScrollView.scrollTo(x, y);
}
});
첫째, 지원 라이브러리에서 NestedScrollView
를 사용
ScrollView secondScrollView = (ScrollView)findViewById(R.id.scrollView);
secondScrollView.scrollTo(x, y);
시도가 작동하지 않은 경우. 그런 다음 NestedScrollView
에 대해 onScrollChange
수신기를 설정합니다. 다음 다시 추가,
scrollView1.setOnScrollChangeListener(new NestedScrollView.OnScrollChangeListener() {
@Override
public void onScrollChange(NestedScrollView v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {
scrollView2.setOnScrollChangeListener(null);
scrollView2.scrollTo(scrollX, scrollY);
scrollView2.setOnScrollChangeListener(...); //SET SCROLL LISTENER AGAIN
}
});
scrollView2
에 대한 scrollTo(..)
를 호출하기 전에 그 리스너를 제거 : 당신은 예를 들어 scrollView1
에 대한 스크롤 변화를받을 때, scrollView2
에 대한 scrollTo(...)
를 호출합니다. 그렇지 않은 경우 scrollTo(..)
을 호출하면 두 청취자 모두에서 무한 통화가 발생하여 NestedScrollView
초가 걸릴 수 있습니다.
그리고 물론 위의 코드를 scrollView2
과 비슷하게 작성해야합니다.
비판은 정직한 질문입니다 : 왜 ScrollView를 사용하고 나서 NestedScrollView를 사용합니까?RecyclerView에는 기본적으로 자체 스크롤 논리가 있습니다 (내 대답 참조). –
질문은 ScrollViews 동기화에 관한 것입니다. 나는 그 (것)들 안쪽에두기 위하여 그가 원하는 무엇을 걱정하지 않는다. –
당신의 답은 더욱 보편적 일 것입니다. –
에 addOnScrollListener(RecyclerView.OnScrollListener listener)
을 통해 RecyclerView.OnScrollListener
을 첨부하십시오.
이벤트가 발생할 때 다른 위치의 업데이트 위치는 scrollTo(int x, int y)
입니다.
어떻게 든 사용자 트리거 스크롤과 다른 스크롤 스크린 (다른 RecyclerViews
이벤트)을 구분해야합니다.
Ugurcan Yildirim과 같은 한 가지 방법으로 업데이트하려는 수신기의 수신자를 분리 할 수 있습니다.
또 다른 옵션은 부울 플래그 isUserTriggered
입니다. 세 번째 방법은 현재 어떤 ScrollView를 구별 할 것인지 결정하는 것입니다 (here 참조).
RecyclerViews에 동일한 데이터가 포함되어 있습니까? –
왜 ScrollView를 사용하고 싶습니까? RecyclerView에는 자체 스크롤 논리가 있습니다! :) –
그들은 서로 다른 데이터를 포함하고 있지 않습니다. @progressive_overload –