私は子供としてカスタムを持っており、HorizontalScrollView
そのLinearLayout
下に最初の 9 つのカスタム ビューがありLinearLayout
ます。
右にスクロールすると、さらに 3 つの子ビューを に追加しLinearLayout
、最初の 3 つの子を削除して、一度に 9 つの子ビューしか表示されないようにする必要があります。
ビュー ID に基づいて検出ポイントを追加しましcurrentViewId > lastChildId - 0.33f * viewSizeLimit
たviewSizeLimit = 9
。これが有効な場合は、ビューを に追加/削除しますLinearLayout
。
私が遭遇した最初の問題は、からビューを削除するLinearLayout
と、子が左にシフトすることです。したがってcurrentViewId = 7
、現在のビューが検出ゾーンにある場合、最後に 3 つのビューを追加し、前面から 3 つのビューを削除します。だから今currentViewId = 4
シフトによる。
scrollBy
のメソッドを追加して、HorizontalScrollView
このビュー シフトを補正し、スクロールがそれほど速くない場合にうまく機能します。
ログの例を次に示します。
07-01 17:01:34.304: INFO/GTA(2476): currentViewId: 6
07-01 17:01:34.304: INFO/GTA(2476): Scroll Distance: 8
07-01 17:01:34.373: INFO/GTA(2476): currentViewId: 6
07-01 17:01:34.383: INFO/GTA(2476): Scroll Distance: 41
07-01 17:01:34.463: INFO/GTA(2476): currentViewId: 7
07-01 17:01:34.463: INFO/GTA(2476): Scroll Distance: 25
07-01 17:01:34.633: INFO/GTA(2476): Added new views to the end
07-01 17:01:34.643: INFO/GTA(2476): currentViewId: 4
07-01 17:01:34.653: INFO/GTA(2476): Scroll Distance: -1440
07-01 17:01:34.653: INFO/GTA(2476): Head View ID: 4 | Tail View ID: 12
07-01 17:01:34.673: INFO/GTA(2476): currentViewId: 7
07-01 17:01:34.673: INFO/GTA(2476): Scroll Distance: 22
07-01 17:01:34.733: INFO/GTA(2476): currentViewId: 7
スクロールビューを高速でスクロール/フリングするときのログは次のとおりです。
07-01 17:03:48.633: INFO/GTA(2476): currentViewId: 6
07-01 17:03:48.643: INFO/GTA(2476): Scroll Distance: 158
07-01 17:03:48.693: INFO/GTA(2476): currentViewId: 6
07-01 17:03:48.704: INFO/GTA(2476): Scroll Distance: 124
07-01 17:03:48.753: INFO/GTA(2476): currentViewId: 7
07-01 17:03:48.753: INFO/GTA(2476): Scroll Distance: 114
07-01 17:03:48.914: INFO/GTA(2476): Added new views to the end
07-01 17:03:48.914: INFO/GTA(2476): currentViewId: 4
07-01 17:03:48.914: INFO/GTA(2476): Scroll Distance: -1440
07-01 17:03:48.914: INFO/GTA(2476): Head View ID: 4 | Tail View ID: 12
07-01 17:03:48.974: INFO/GTA(2476): currentViewId: 10
07-01 17:03:48.974: INFO/GTA(2476): Scroll Distance: 1843
07-01 17:03:49.194: INFO/GTA(2476): Added new views to the end
07-01 17:03:49.204: INFO/GTA(2476): currentViewId: 7
07-01 17:03:49.204: INFO/GTA(2476): Scroll Distance: -1440
07-01 17:03:49.204: INFO/GTA(2476): Head View ID: 7 | Tail View ID: 15
07-01 17:03:49.253: INFO/GTA(2476): currentViewId: 14
07-01 17:03:49.264: INFO/GTA(2476): Scroll Distance: 1866
07-01 17:03:49.403: INFO/GTA(2476): Added new views to the end
07-01 17:03:49.414: INFO/GTA(2476): currentViewId: 11
07-01 17:03:49.414: INFO/GTA(2476): Scroll Distance: -1440
07-01 17:03:49.414: INFO/GTA(2476): Head View ID: 10 | Tail View ID: 18
07-01 17:03:49.463: INFO/GTA(2476): currentViewId: 18
07-01 17:03:49.463: INFO/GTA(2476): Scroll Distance: 1551
07-01 17:03:49.703: INFO/GTA(2476): Added new views to the end
07-01 17:03:49.713: INFO/GTA(2476): currentViewId: 15
07-01 17:03:49.713: INFO/GTA(2476): Scroll Distance: -1440
07-01 17:03:49.713: INFO/GTA(2476): Head View ID: 13 | Tail View ID: 21
ログから、HorizontalScrollView
それ自体が非常に大量にスクロールすることがわかります (つまり、1843 年、1866 年、1551 年)。表示されている-1440
値はscrollBy
、ビューポートに適切なビューを表示するために追加した補正です。
HorizontalScrollView
したがって、問題は、スクロール自体が非常に長い距離を移動する理由がわからないことです。この発生の理由はありますか?
を使用する以外に、これを実装するより良い方法はありますHorizontalScrollView
か?
これにはゲーム エンジンの使用を検討する必要がありますか?
ありがとう。