Re: [Android-SDK-Japan:2417] スクロールビューの止まった瞬間の座標を取得する方法

2,573 views
Skip to first unread message

Keiji Ariyama

unread,
Sep 21, 2012, 2:16:55 PM9/21/12
to android-...@googlegroups.com
有山と申します。

 結論から言うと、止まった瞬間の位置を取得するスマートな方法は、現時点で
は存在しないと、僕は思います。

 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

ひきたま

unread,
Sep 22, 2012, 2:25:14 AM9/22/12
to android-...@googlegroups.com
ひきたまです。

有山さん
ご返信ありがとうございます。

onScrollChangeが発生したときの処理を見直す事で、
onScrollChangeが発生したときすべてで処理をしても
正常に動きました。
余計な処理の気もするので、
スマートに終了時の座標が取得できればいいのですが。

リフレクティングの知識がないので、
タイマーで処理する方法も今後は試そうかと思います。

現状では、課題が解決しましたので、
お礼申し上げます。
ありがとうございました。



Reply all
Reply to author
Forward
0 new messages