ScrollView がいつスクロールを終了したかを検出しようとしているので、その位置を少し変更できます。ユーザーがいつ指を離したかを検出するために ACTION_UP を使用する前に、スクロールが完了する前に変更されるため、「フリング」を使用できないことに気付きました。
ScrollView がスクロールを終了したことを検出する方法はありますか? または、ListView のようなスクロール状態を検出しますか?
これを実装する方法に関する他のアイデアはありますか?
ありがとう。
ScrollView がいつスクロールを終了したかを検出しようとしているので、その位置を少し変更できます。ユーザーがいつ指を離したかを検出するために ACTION_UP を使用する前に、スクロールが完了する前に変更されるため、「フリング」を使用できないことに気付きました。
ScrollView がスクロールを終了したことを検出する方法はありますか? または、ListView のようなスクロール状態を検出しますか?
これを実装する方法に関する他のアイデアはありますか?
ありがとう。
Jourbacのコメントに基づいて解決策を実装しました。
よろしく
import android.content.Context;
import android.os.Handler;
import android.os.Message;
import android.util.AttributeSet;
import android.util.Log;
import android.widget.ScrollView;
public class MyScrollView extends ScrollView {
private static final int WHAT = 1;
class MyHandler extends Handler {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if(!hasMessages(WHAT)) {
Log.i("TestScroll", "Last msg!. Position from "
+ msg.arg1 + " to " + msg.arg2);
}
}
}
private Handler mHandler = new MyHandler();
public MyScrollView(Context context) {
super(context);
}
public MyScrollView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MyScrollView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
protected void onScrollChanged(int l, int t, int oldl, int oldt) {
super.onScrollChanged(l, t, oldl, oldt);
final Message msg = Message.obtain();
msg.arg1 = oldt;
msg.arg2 = t;
msg.what = WHAT;
mHandler.sendMessageDelayed(msg, 500);
}
}
ScrollView の子クラス、たとえば MyScrollView を作成し、ScrollView の代わりにそれを使用することで、これに取り組みます。
そうすれば、スクロール時に呼び出される ScrollView のメソッドをオーバーライドできます。それらに何らかの形式のコールバックを追加します( で対応するメソッドを呼び出すことを忘れないでくださいsuper
)
ScrollView のどのメソッドがいつ呼び出されるかはわかりません。スコールが発生するたびにそのうちの1つが呼び出されると思いますが、どれがscrollTo()
.
それらをすべてオーバーライドして、呼び出されたときにログに記録することは、非常に興味深い学習体験になると思います。私は自分でそれをやりたいと思うかもしれません.もしそうするなら、他の人がその間に誰もしないと仮定して、私はより有用な答えを返すでしょう.