私はカスタムHorizontalScrollView
,LinearLayout
、そして最初のカスタムビューはLinearLayout
です。Android:HorizontalScrollViewスクロールの問題
右にスクロールすると、LinearLayout
にさらに3つの子ビューが追加され、最初の3人の子ビューが削除されるため、一度に9つの子ビューのみが表示されます。
viewSizeLimit = 9
の場合、ビューIDに基づいて検出ポイントが追加されました。この場合、currentViewId > lastChildId - 0.33f * viewSizeLimit
の場合はviewSizeLimit = 9
となります。これが有効な場合は、LinearLayout
からビューを追加/削除するときです。
私が遭遇した最初の問題は、LinearLayout
からビューを削除すると、子が左にシフトされることです。したがって、currentViewId = 7
と現在のビューが検出ゾーンにある場合は、最後に3つのビューを追加し、前面から3つのビューを削除します。だから今はシフトのためにcurrentViewId = 4
。
このビューシフトを補正するためにHorizontalScrollView
のメソッドを追加し、スクロールがそれほど速くない場合はうまく動作します。
ここでログからの例です:ログからの
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
スクロールすることがわかる。
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
ここでは、高速scrollviewを投げつけ/スクロールしたときのログです(1843年、1866年、1551年)。表示されている-1440
の値は、適切なビューをビューポートに表示するように追加した補正値です(scrollBy
)。
今、問題は私がHorizontalScrollView
がそのような大きな距離でスクロールする理由を見つけることができないということです。この発生の理由は何ですか?
HorizontalScrollView
を使用する以外にこれを実装する方法はありますか?
このためにゲームエンジンの使用を検討する必要がありますか?
ありがとうございました。
ありがとうフィリップ。私たちはすでに 'Gallery'の使用を考えましたが、スナップ効果は避けようとしています。基本的に、スクロールは可能な限り滑らかでなければなりません。 –