gpt4 book ai didi

android - 在 ScrollView 上检测 fling 结束

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:25:11 28 4
gpt4 key购买 nike

我重写了 ScrollView 以将 MotionEvent 传递给 GestureDetector 以检测 ScrollView 上的滑动事件。我需要能够检测滚动何时停止。这与 MotionEvent.ACTION_UP 事件不一致,因为这通常发生在滑动手势开始时,随后是一系列 onScrollChanged() 调用 ScrollView 。

所以基本上我们在这里处理的是以下事件:

  1. onFling
  2. onScrollChanged, onScrollChanged, onScrollChanged, ..., onScrollChanged

当 onScrollChanged 事件完成触发时没有回调。我正在考虑在 onFling 期间使用 Handler 将消息发布到事件队列并等待 Runnable 执行以发出发送结束的信号,不幸的是它在首先调用 onScrollChanged。

还有其他想法吗?

最佳答案

我结合了 here 中的一些答案构建一个类似于 AbsListView 的工作监听器。它本质上就是您所描述的,并且在我的测试中效果很好。

注意:您可以简单地覆盖 ScrollView.fling(int velocityY) 而不是使用您自己的 GestureDetector

import android.content.Context;
import android.util.AttributeSet;
import android.widget.ScrollView;

public class CustomScrollView extends ScrollView {

private static final int DELAY_MILLIS = 100;

public interface OnFlingListener {
public void onFlingStarted();
public void onFlingStopped();
}

private OnFlingListener mFlingListener;
private Runnable mScrollChecker;
private int mPreviousPosition;

public CustomScrollView(Context context) {
this(context, null, 0);
}

public CustomScrollView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}

public CustomScrollView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);

mScrollChecker = new Runnable() {
@Override
public void run() {
int position = getScrollY();
if (mPreviousPosition - position == 0) {
mFlingListener.onFlingStopped();
removeCallbacks(mScrollChecker);
} else {
mPreviousPosition = getScrollY();
postDelayed(mScrollChecker, DELAY_MILLIS);
}
}
};
}

@Override
public void fling(int velocityY) {
super.fling(velocityY);

if (mFlingListener != null) {
mFlingListener.onFlingStarted();
post(mScrollChecker);
}
}

public OnFlingListener getOnFlingListener() {
return mFlingListener;
}

public void setOnFlingListener(OnFlingListener mOnFlingListener) {
this.mFlingListener = mOnFlingListener;
}

}

关于android - 在 ScrollView 上检测 fling 结束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19144961/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com