有山と申します。
結論から言うと、止まった瞬間の位置を取得するスマートな方法は、現時点で
は存在しないと、僕は思います。
ScrollViewのソースコードを見てみたのですが、それらしく使えるAPIは用意
されていないようでした。
その上で、現時点で、ひきたまさんの課題を解決する案は、2つあると考えて
います。
1つ目は、onScrollChangedの中でタイマーのようなものを動かし、ある一定
時間onScrollChangedが発生しなければ、スクロールが終了したと見なす方法です。
これは常にイベントの発生を監視することになるので、実装に注意しないと不
格好なコードになりそうです。
2つ目は、こちらはお薦めしませんが、リフレクティングを使って、
ScrollViewクラスのmScrollerメンバ変数を参照するという方法です。
タッチ操作に対応したスクロールの移動量や加速・減速は、Scrollerというク
ラスで計算処理されています。このScrollerには、isFinished()というメソッド
があり、スクロールが完了したかを判定できるようになっています。
しかしながら、ScrollViewではScrollerのメンバ変数mScrollerは、privateで
宣言されているので、継承クラスからは参照することが出来ません。そこでリフ
レクティングを使って無理矢理読み込めば。。。という話です。
僕が考えつく方法はこれくらいです。他に良い方法があれば誰か教えてください。
(9/21/12 12:08 PM), ひきたま wrote:
> はじめまして。
>
>
> スクロールビューが止まった瞬間の位置を判別して処理をしたいと思います。
>
> 以下を参考にさせていただきました。
> (AndroidのscrollViewでスクロールの位置が変わったのを取得する方法)
>
http://doruby.kbmj.com/daoka_tips/20120417/Android_ScrollView_
>
> HorizontalScrollViewを継承したObservableHorizontalScrollViewを作成し、
> 以下のonScrollChangedメソッドで座標を取得しています。
>
> @Override
>
> protected void onScrollChanged(int x, int y, int oldx, int oldy) {
>
> super.onScrollChanged(x, y, oldx, oldy);
>
> }
>
> }
>
> scrollViewが動いている間にずっと取得できるのですが、
> 止まった瞬間が取得できません。
> 止まった瞬間の座標を取得する方法を
> ご教授ください。
> よろしくお願い致します。
>
--
Keiji,
ml_an...@c-lis.co.jp