7

2 つの ScrollView の位置を同期しようとしています。テレビガイドのリストを表示するためにこれをやろうとしています。

RelativeLayout を拡張してガイドを表示するカスタム クラスを作成しました。この相対レイアウトには 4 つの子があります。左上隅のイメージビュー、右上に列ヘッダーを表示する Horizo​​ntalScrollView、左下に行ヘッダーを表示する ScrollView、およびリストを含む右下の ScrollView です。 . 次に、この ScrollView には Horizo​​ntalScrollView が含まれ、これにはデータを表示する複数の子ビューを持つ LinearLayout が含まれます。これで明確に説明できればと思いますが、わかりやすくするための図を次に示します。

 ____________
|__|___hsv___|
|  |         |
|  | sv ->   |
|  |  hsv -> |
|sv|   ll -> |
|  |    etc  |
|  |         |
|__|_________|

ガイドのリストを水平方向と垂直方向の両方にスクロールしたかったので、このように設定しましたが、これを行うスクロール ビューはありません。また、ガイドのリストがどの位置にあっても行ヘッダーと列ヘッダーが表示されるようにしたいのですが、それらが適切に並んでいる必要があります。そこで、2 つの hsv の位置を同期させ、2 つの sv の位置も同期させる方法を見つけようとしています。また、数ミリ秒ごとにハンドラーを実行して一方のビューをポーリングし、もう一方のビューで scrollTo を呼び出すことを回避する方法でそれを実行しようとしています。

これが最善の方法であるかどうかは決してわかりませんが、これが私が思いついた方法です。誰か他の提案があれば、お気軽にどうぞ!

4

5 に答える 5

1

高速フリンジを行うと、タッチを離した後もスクロールがしばらく続くため、タッチ イベントの処理だけでは十分ではありません。解決策は、computeScroll() メソッドをオーバーライドすることです。https://github.com/chrisjenx/ParallaxScrollViewでそれがどのように行われるかをご覧ください。

于 2013-06-27T14:27:09.950 に答える
1

すべてのパネルにonTouchEvent(MotionEvent me)を実装する価値はありませんか? パネルの 1 つがスクロールされると、このメソッドが呼び出され、他のすべてのパネルが同期されていることを確認できます。

于 2010-03-20T03:20:30.093 に答える
1

タッチ イベントの処理は 100% 機能しません。異なるビューでのスクロールの量は、常に同期しているとは限りません。

于 2010-04-06T11:36:56.380 に答える
0

あなたはこの投稿を見ているかもしれません:リンク

この男が実際に行っていることは、カスタム ScrollView を作成してメソッドをオーバーライドし、リスナーを追加して、画面に描画される前にonScrollChangedそれらを同期することです。

今できることは、メイン フレームとして aScrollViewをa に追加することですHorizontalScrollView。左のバーはHorizontalScrollView、上のバーはScrollViewです。次に、メインScrollViewとメインHorizontalScrollViewを 2 つに分けて登録しますScrollManagers(上記のリンクを参照)。

次に、hsv と sv のスクロールを無効にして、適切な に追加しますScrollManagers。その後、すべてが正常に機能するはずです。

-

PS。を使用せずにリスナーのみを使用するとScrollManager、1 フレームの同期遅延が発生します。

于 2013-06-27T14:51:23.050 に答える
0

以下のことを行うことで、同じレイアウトを実現しました。

xml の SyncedScrollView は、2 つのスクロールビューを同期するために使用されるカスタム スクロールビューです。

以下の 2 つのスタックオーバーフローの回答を参照する必要があります。

  1. SynchedScrollView と答え
  2. 最適化された SynchedScrollView my answer

以下のxmlを確認してください

<RelativeLayout
    android:id="@+id/activity_main_linear_before_all_scroll"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <TextView
        android:id="@+id/activity_main_empty_box"
        android:layout_width="50dp"
        android:layout_height="30dp"
        android:text="xx"
        android:gravity="center" />

    <com.example.SyncedScrollView
        android:id="@+id/activity_main_observable_scrollview_1"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_below="@+id/activity_main_empty_box"
        android:fadeScrollbars="false"
        android:overScrollMode="never"
        android:scrollbars="none">

        <LinearLayout
            android:id="@+id/activity_main_linear_left_headers"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical">

            <TextView
                android:layout_width="50dp"
                android:layout_height="30dp"
                android:gravity="center"
                android:padding="5dp"
                android:text="row 1" />

            <TextView
                android:layout_width="50dp"
                android:layout_height="30dp"
                android:gravity="center"
                android:padding="5dp"
                android:text="row 2" />

            <TextView
                android:layout_width="50dp"
                android:layout_height="30dp"
                android:gravity="center"
                android:padding="5dp"
                android:text="row 3" />

        </LinearLayout>

    </com.example.SyncedScrollView>

    <HorizontalScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_toEndOf="@+id/activity_main_empty_box"
        android:layout_toRightOf="@+id/activity_main_empty_box"
        android:fadeScrollbars="false"
        android:overScrollMode="never">

        <RelativeLayout
            android:id="@+id/activity_main_body_relative"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal">

            <LinearLayout
                android:id="@+id/activity_main_top_headers"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:orientation="horizontal">

                <TextView
                    android:layout_width="50dp"
                    android:layout_height="30dp"
                    android:gravity="center"
                    android:padding="5dp"
                    android:text="column 1" />

                <TextView
                    android:layout_width="50dp"
                    android:layout_height="30dp"
                    android:gravity="center"
                    android:padding="5dp"
                    android:text="column 2" />

                <TextView
                    android:layout_width="50dp"
                    android:layout_height="30dp"
                    android:gravity="center"
                    android:padding="5dp"
                    android:text="column 3" />

            </LinearLayout>

            <com.example.SyncedScrollView
                android:id="@+id/activity_main_observable_scrollview_2"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_below="@+id/activity_main_top_headers"
                android:fadeScrollbars="false"
                android:overScrollMode="never"
                android:scrollbars="vertical">

                <LinearLayout
                    android:id="@+id/activity_main_body"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:orientation="vertical">

                    <LinearLayout
                        android:id="@+id/activity_main_body_row_1"
                        android:layout_width="match_parent"
                        android:layout_height="match_parent"
                        android:orientation="horizontal">

                        <TextView
                            android:layout_width="50dp"
                            android:layout_height="30dp"
                            android:gravity="center"
                            android:padding="5dp"
                            android:text="1,1" />

                        <TextView
                            android:layout_width="50dp"
                            android:layout_height="30dp"
                            android:gravity="center"
                            android:padding="5dp"
                            android:text="1,2" />

                        <TextView
                            android:layout_width="50dp"
                            android:layout_height="30dp"
                            android:gravity="center"
                            android:padding="5dp"
                            android:text="1,3" />

                    </LinearLayout>

                    <LinearLayout
                        android:id="@+id/activity_main_body_row_2"
                        android:layout_width="match_parent"
                        android:layout_height="match_parent"
                        android:orientation="horizontal">

                        <TextView
                            android:layout_width="50dp"
                            android:layout_height="30dp"
                            android:gravity="center"
                            android:padding="5dp"
                            android:text="2,1" />

                        <TextView
                            android:layout_width="50dp"
                            android:layout_height="30dp"
                            android:gravity="center"
                            android:padding="5dp"
                            android:text="2,2" />

                        <TextView
                            android:layout_width="50dp"
                            android:layout_height="30dp"
                            android:gravity="center"
                            android:padding="5dp"
                            android:text="2,3" />

                    </LinearLayout>

                    <LinearLayout
                        android:id="@+id/activity_main_body_row_3"
                        android:layout_width="match_parent"
                        android:layout_height="match_parent"
                        android:orientation="horizontal">

                        <TextView
                            android:layout_width="50dp"
                            android:layout_height="30dp"
                            android:gravity="center"
                            android:padding="5dp"
                            android:text="3,1" />

                        <TextView
                            android:layout_width="50dp"
                            android:layout_height="30dp"
                            android:gravity="center"
                            android:padding="5dp"
                            android:text="3,2" />

                        <TextView
                            android:layout_width="50dp"
                            android:layout_height="30dp"
                            android:gravity="center"
                            android:padding="5dp"
                            android:text="3,3" />

                    </LinearLayout>

                </LinearLayout>

            </com.example.SyncedScrollView>

        </RelativeLayout>

    </HorizontalScrollView>

</RelativeLayout>

ここでは、各セルは TextView です。ボックスを描画するように背景のドローアブルを設定できます(テーブルのように見えます)

また、左ヘッダー、上部ヘッダー、本文の TextView を動的に追加して、テーブルを動的に作成することもできます。

これはレイアウトのスクリーンショットです これはレイアウトのスクリーンショットです

私の純粋な英語でごめんなさい。

于 2016-11-25T12:46:16.700 に答える