我试图检测ScrollView何时滚动完毕,以便稍微修改其位置。在我使用ACTION_UP来检测用户何时举起手指之前,我意识到这不会允许我使用“投掷”,因为它会在滚动完成之前修改滚动。检测scrollView滚动时的状态
有没有什么办法可以检测ScrollView何时滚动完成?或者检测它的滚动状态像ListView?
关于如何实现这个的任何其他想法?
谢谢。
我试图检测ScrollView何时滚动完毕,以便稍微修改其位置。在我使用ACTION_UP来检测用户何时举起手指之前,我意识到这不会允许我使用“投掷”,因为它会在滚动完成之前修改滚动。检测scrollView滚动时的状态
有没有什么办法可以检测ScrollView何时滚动完成?或者检测它的滚动状态像ListView?
关于如何实现这个的任何其他想法?
谢谢。
我会通过创建一个ScrollView的子类,比如说MyScrollView,并用它来代替ScrollView来解决这个问题。
这样你就可以覆盖滚动时调用的ScrollView的方法;并在其中添加someform的回调(不要忘记调用super
中的相应方法)
我不能真正告诉你ScrollView的哪些方法将在何时被调用;我认为每次发生骚动时都会调用其中的一个,但哪一个......可能只是scrollTo()
。
我想这将是一个非常有趣和学习的经验,覆盖他们所有,只需登录时,他们被称为。如果我这样做,我可能会自己想这样做,但我肯定会回来一个更有用的答案,假设在此期间没有其他人做。
感谢帮助。有没有什么地方可以找到ScrollView的源代码,这样我就可以看到它们是如何处理滚动的?我想我真的不需要改变它,只是添加一些东西到处理我的东西,但它仍然有助于看到他们的东西。 – Matt 2010-06-22 19:19:41
检查ScrollView的源代码似乎也是一个不错的主意。我在那里找到了甜甜圈版本:http://www.netmite.com/android/mydroid/donut/frameworks/base/core/java/android/widget/ScrollView.java - 我看到'scrollTo()'的源代码一个评论说每调用一次'scrollBy()'就应该调用 - 所以我倾向于覆盖'scrollTo()'以开始。祝你好运与阅读:-) – Joubarc 2010-06-22 19:45:25
只需重写onScrollChanged()。 – 2010-06-22 19:51:13
我实现了一个基于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);
}
}
尝试此链接:http://stackoverflow.com/questions/8181828/android-detect-when-scrollview-stops-scrolling – Shraddha 2012-05-23 05:46:24