আমার সমাধান লিন ইউ চেংয়ের দুর্দান্ত সমাধানের একটি প্রকরণ এবং যখন স্ক্রোলিং শুরু হয়েছে এবং বন্ধ হয়েছে তখন তা সনাক্ত করে।
পদক্ষেপ 1. একটি অনুভূমিকস্ক্রোলভিউ এবং অনস্ক্রোলচেনডলাইস্টেনার সংজ্ঞা দিন:
CustomHorizontalScrollView scrollView = (CustomHorizontalScrollView) findViewById(R.id.horizontalScrollView);
horizontalScrollListener = new CustomHorizontalScrollView.OnScrollChangedListener() {
@Override
public void onScrollStart() {
}
@Override
public void onScrollEnd() {
}
};
scrollView.setOnScrollChangedListener(horizontalScrollListener);
পদক্ষেপ 2. কাস্টমহোরাইজেন্টালস্ক্রোলভিউ ক্লাস যুক্ত করুন:
public class CustomHorizontalScrollView extends HorizontalScrollView {
public interface OnScrollChangedListener {
void onScrollStart();
void onScrollEnd();
}
private long lastScrollUpdate = -1;
private int scrollTaskInterval = 100;
private Runnable mScrollingRunnable;
public OnScrollChangedListener mOnScrollListener;
public CustomHorizontalScrollView(Context context) {
this(context, null, 0);
init(context);
}
public CustomHorizontalScrollView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
init(context);
}
public CustomHorizontalScrollView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init(context);
}
private void init(Context context) {
mScrollingRunnable = new Runnable() {
public void run() {
if ((System.currentTimeMillis() - lastScrollUpdate) > scrollTaskInterval) {
lastScrollUpdate = -1;
mOnScrollListener.onScrollEnd();
} else {
postDelayed(this, scrollTaskInterval);
}
}
};
}
public void setOnScrollChangedListener(OnScrollChangedListener onScrollChangedListener) {
this.mOnScrollListener = onScrollChangedListener;
}
public void setScrollTaskInterval(int scrollTaskInterval) {
this.scrollTaskInterval = scrollTaskInterval;
}
@Override
protected void onScrollChanged(int l, int t, int oldl, int oldt) {
super.onScrollChanged(l, t, oldl, oldt);
if (mOnScrollListener != null) {
if (lastScrollUpdate == -1) {
mOnScrollListener.onScrollStart();
postDelayed(mScrollingRunnable, scrollTaskInterval);
}
lastScrollUpdate = System.currentTimeMillis();
}
}
}