2つのスクロール位置を同期させる必要がありますScrollViews
。RelativeLayout内の2つのScrollViewのスクロールを同期
ScrollViews
には、それぞれ個別のRecyclerView
が含まれています(設計要件のため、同じScrollViewに入れることはできません)。
どうすれば実現できますか?
2つのスクロール位置を同期させる必要がありますScrollViews
。RelativeLayout内の2つのScrollViewのスクロールを同期
ScrollViews
には、それぞれ個別のRecyclerView
が含まれています(設計要件のため、同じScrollViewに入れることはできません)。
どうすれば実現できますか?
私は非常にあなたのデザインを変更するが、最初のスクロールビューのために、この
を達成するための方法があり、2変数xを定義し、y、および現在のスクロール位置
x = firstScrollView.getScrollX();
y = firstScrollView.getScrollY();
を取得し、これらを渡すことをお勧めします値を他のscrollView "scrollTo"メソッドに渡します。
のような:
ScrollView secondScrollView = (ScrollView)findViewById(R.id.scrollView);
secondScrollView.scrollTo(x, y);
試してうまくいかなかった場合:すべての
secondScrollView.post(new Runnable() {
@Override
public void run() {
secondScrollView.scrollTo(x, y);
}
});
まず、それが簡単にスクロールイベントを聞くために私たちを可能にするのでサポートライブラリからNestedScrollView
を使用しています。次に、NestedScrollView
の両方のリスナーをonScrollChange
に設定します。あなたは、例えばscrollView1
ためにスクロールチェンジを受信すると、scrollView2
ためscrollTo(...)
を呼び出す:
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(..)
を呼び出す前に、もう一度それを追加し、そのリスナーを削除します。そうでない場合、scrollTo(..)
を呼び出すと、両方のリスナで無限のコールがNestedScrollView
秒になる可能性があります。
もちろん、上記のようなコードをscrollView2
に書き込む必要があります。
批評はない正直な質問:なぜScrollViewを使うの?そしてNestedScrollViewを使うのはなぜですか?RecyclerViewには、デフォルトで独自のスクロールロジックがあります(私の答えを見てください)。 –
質問はScrollViewsの同期についてです。私は彼らの中に入れたいものは気にしない。 –
あなたの答えはより普遍的なものになるでしょう。 –
RecyclerView.OnScrollListener
をRecyclerViews
に、addOnScrollListener(RecyclerView.OnScrollListener listener)
で接続します。
イベントが発生したときにもう1つの位置を更新する:scrollTo(int x, int y)
。
どういうわけか、ユーザーがトリガーしたスクロールと(他のRecyclerViews
イベントからの)プログラムスクロールを区別してください。
Ugurcan Yildirimのように、更新したいScrollView
のリスナーを切り離す方法があります。
もう1つのオプションはブール値フラグisUserTriggered
です。 3番目の方法は、現在どのScrollViewが区別することに焦点を当てているかを判断することです(here参照)。
RecyclerViewには同じデータが含まれていますか? –
なぜScrollViewをまったく使用したいのですか? RecyclerViewには独自のスクロールロジックがあります。 :) –
これらのデータには異なるデータが含まれていません.. @progressive_overload –