首先判断是否在停止滚动的状态(也可以不用这段代码)
参考https://www.jianshu.com/p/eb4b745afcd0
public static boolean isfinishScroll(ScrollVIEw scrollVIEw) { try { if (scrollVIEw != null) { FIEld mScroller = scrollVIEw.getClass().getDeclaredFIEld("mScroller"); mScroller.setAccessible(true); Object object = mScroller.get(scrollVIEw); if (object instanceof OverScroller) { OverScroller overScroller = (OverScroller) object; return overScroller.isFinished(); } } } catch (NoSuchFIEldException e) { e.printstacktrace(); } catch (illegalaccessexception e) { e.printstacktrace(); } return false; }
下面参考https://blog.csdn.net/u011213403/article/details/103704551
isDown记录是否在按下或移动状态,CountDownTimer倒计时100ms结束
private boolean isDown;//是否在按下或移动状态 private CountDownTimer scrollCountTimer = new CountDownTimer(100, 1){ @OverrIDe public voID onTick(long millisUntilFinished) {} @OverrIDe public voID onFinish() { if (isfinishScroll(scrollVIEw)){//其实此时已经停止滚动了,也可以不用isfinishScroll再判断是否已停止滚动。 //停止滚动后的 *** 作 } } };
scrollVIEw的滚动监听setonScrollchangelistener在API>=23时才可以使用,这里使用getVIEwTreeObserver().addOnScrollChangedListener()。
scrollVIEw.getVIEwTreeObserver().addOnScrollChangedListener(new VIEwTreeObserver.OnScrollChangedListener() { @OverrIDe public voID onScrollChanged() { if (!isDown){//惯性滚动时,重新倒计时 scrollCountTimer.cancel(); scrollCountTimer.start(); } } });
调用scrollVIEw的触摸监听setontouchListener
scrollVIEw.setontouchListener(new VIEw.OntouchListener() { @OverrIDe public boolean ontouch(VIEw v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_UP: case MotionEvent.ACTION_CANCEL://抬起开始倒计时 isDown = false; scrollCountTimer.start(); break; case MotionEvent.ACTION_DOWN: case MotionEvent.ACTION_MOVE://按下或移动状态取消倒计时 isDown = true; scrollCountTimer.cancel(); break; } return ontouchEvent(event); } });
总结 以上是内存溢出为你收集整理的Android:ScrollView停止滚动的监听全部内容,希望文章能够帮你解决Android:ScrollView停止滚动的监听所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)