2つの同期スクロールに関する厄介な問題があります。 異なるビュー。 私は独自のグリッドビューウィジェットを作っています。これは、グリフを使って一方向にしか表示されない "sticky"ビューを に表示します。時間が上部にあり、日付が左側にある カレンダーを考えてください。 時間を横方向にスクロールすると、日付表示はそのまま残ります。 日付を縦方向にスクロールすると は滞在する必要があります置く。Android:2つの異なるビューの同期スクロール
グリッド自体は、 の垂直スクロールビューでネストされた水平スクロールビューを使用して実装されます。グリッドはうまくいっているので、問題はありません。 スティッキビューは実際のグリッドにはないので、グリッドスクロールビューで onScrollChangedをオーバーライドし、ユーザーがグリッドをスクロールしたときにスティッキビューの scrollToをプログラムで呼び出します。
これは、2つの異なるビューがスクロールを開始してスクロールを終了するまで、わずかな時間オフセットが となることを除いて、期待どおりに機能します。あなたはスクロールが可能性が高い
すべてのビューがスクロールする図である。私が思うUIスレッド上で直線的に を実行され、私はスムーズスクロール を有効にしてsmoothScrollToを使用していることを考えるとそれ はしようとする代わりに、など、理にかなっていますこれを改善するために、同じ問題にもかかわらず です。この問題は、Samsung Galaxy Tabなどの大画面の 画面で特に顕著ですが、中小画面デバイスではほとんど となります。
ご協力いただきましてありがとうございます。簡単な修正があれば、それは新しいデザイン(上記の粘着性のあるビューの使用に合致する)を意味するならば、それはそうです。
progをトリガーするコード。それは、任意のヘルプ
のだならば、スクロール、下の水平
@Override
protected void onScrollChanged(int x, int y, int oldx, int oldy) {
mListener.onScrollY(y);
super.onScrollChanged(x, y, oldx, oldy);
}
// which leads to,
// Handle vertical scroll
public void onScrollY(final int y) {
mCurrentY = y;
mVerticalScroll.smoothScrollTo(0, y);
}
XMLレイアウトの同じ、縦スクロールビューとグリッド項目に包まれた水平スクロールビューで実際のグリッドは、上下方向に追加されます
>
< com.....VerticalScrollView
android:id="@+id/gridscroll"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_below="@id/timescroll"
android:layout_toRightOf="@id/vertscroll"
android:layout_alignTop="@id/vertscroll"
android:layout_marginLeft="2dp" android:scrollbars="none"
android:fadingEdge="none">
< com....HorizScrollView
android:id="@+id/horizscroll"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:scrollbars="none"
android:fadingEdge="none">
< LinearLayout android:id="@+id/grid"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
< /LinearLayout>
< /com.....HorizScrollView>
< /com.....VerticalScrollView>
水平スティッキービューのLinearLayoutネスト
すべての
< com.....GridTimeScrollView
android:id="@+id/timescroller"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:scrollbars="none"
android:fadingEdge="none">
< LinearLayout android:id="@+id/timelist"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal" />
< /com.....GridTimeScrollView>
垂直粘着性の観点
< com....GridVertListScrollView
android:id="@+id/vertscroller"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:scrollbars="none"
android:fadingEdge="none">
< LinearLayout
android:id="@+id/vertitemlist"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" />
< /com.....GridVertListScrollView>
あなたの答えをありがとう。あなたが参照する投稿は、スクロールビューとリストビューの組み合わせについて議論しているようですね。スクロールビューの入れ子はおそらく最適ではないが、最初から新しいウィジェットを必要としない唯一の選択肢のように思えた。私はこの質問に答えた前に、私はこれが私の現在のソリューションよりも "同期"されたスクロールをどう保証するのだろうか?一度に1つのビュー(グリッド、スティッキービュー)をスクロールする必要はありませんが、スクロール方法が少しずれている可能性がありますか? – Andreas
No.私はあなたの "同期"問題は、スクロールに関する情報を取得したときに、すでに1つのビューで処理されているため、他のスクロールも同様にスクロールするためです。このようにして、1つのビューがスクロールし、他のビューは次のサイクルで対応するスクロールを行います。私のアプローチでは、すべてのビューが同時にスクロールします。そしてあなたはその問題を抱えません。 –