我正在尝试检测ScrollView何时完成滚动,以便稍微修改其位置。在我使用ACTION_UP检测用户何时举起手指之前,我意识到这不允许我使用“投掷”,因为它会在完成之前修改滚动。
有没有办法检测ScrollView何时完成滚动?或者像ListView一样检测它的滚动状态?
关于如何实现这一点的任何其他想法?
感谢。
答案 0 :(得分:3)
我实施了一个基于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);
}
}
答案 1 :(得分:1)
我会通过创建ScrollView的子类,比如MyScrollView,并使用它而不是ScrollView来解决这个问题。
这样你可以覆盖滚动时调用的ScrollView方法;并在其中添加someform的回调(不要忘记调用super
中的相应方法)
我无法告诉你什么时候会调用ScrollView的方法;我假设每次scoll发生时都会调用其中一个,但是哪一个......可能只是scrollTo()
。
我认为覆盖所有这些并且只是在被调用时记录将是一个非常有趣和学习的经验。我可能想自己这样做,如果我这样做,我肯定会回来一个更有用的答案,假设在那段时间没有其他人做过。