2011-07-01 11 views
1

私はカスタムHorizontalScrollView,LinearLayout、そして最初のカスタムビューはLinearLayoutです。Android:Horizo​​ntalScrollViewスクロールの問題

右にスクロールすると、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を使用する以外にこれを実装する方法はありますか?

このためにゲームエンジンの使用を検討する必要がありますか?

ありがとうございました。

答えて

0

ギャラリーを使用することをお勧めします。ギャラリーは、基本的には水平のリストビューです。

SpinnerAdapter実装は、領域の1/9の幅のビューをギャラリーに提供しますが、そうでない場合は標準実装です。これは、私が(あなたの要件を理解していると仮定して)あなたが探している効果を与えると思う無制限のスクロールを与えるでしょう。また、ポジションにスナップするという幸いな副作用もあります。

私はそれが役に立ちそうです。

+0

ありがとうフィリップ。私たちはすでに 'Gallery'の使用を考えましたが、スナップ効果は避けようとしています。基本的に、スクロールは可能な限り滑らかでなければなりません。 –

関連する問題