介绍
这篇文章给大家分享的是有关Android scrollview监听滑动状态的方法的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
<强> scrollview 强>
视图的滚动过程,其实是在不断修改原点坐标。当手指触摸后,滚动视图会暂时拦截触摸事件,使用一个计时器。假如在计时器到点后没有发生手指移动事件,那么scrollview发送跟踪事件到被点击的子视图;若是在计时器到点后发生了移动事件,那么scrollview取消跟踪自己促发滚动。
首先说一下,NestedScrollView的滑动事件的监听,
如果使用,
nestedScrollView.setOnScrollChangeListener (new View.OnScrollChangeListener (), { ,,,,@Override ,,,,,public void onScrollChange (View v, int scrollX,, int scrollY,, int oldScrollX,, int oldScrollY), { , ,,,,,} ,,,});
这个方法在API祝辞=23,时才可以使用,怎么解决呢。我们可以自己定义一个滚动视图
public class MyScrollView extends NestedScrollView { ,,private OnScrollChanged  mOnScrollChanged; public 才能MyScrollView (Context 上下文),{ ,,,这(上下文,null); ,,} public 才能;MyScrollView (Context 上下文,AttributeSet attributeSet), { ,,,(上下文,attributeSet,, 0); ,,} public 才能;MyScrollView (Context 上下文,AttributeSet attrs,, int defStyleAttr), { ,,,超级(上下文,attrs, defStyleAttr); ,,} @Override才能 protected 才能;void  onScrollChanged (l, int int t, int oldl,, int oldt), { ,,,super.onScrollChanged (l,, t, oldl,, oldt); ,,,if (mOnScrollChanged !=, null), { ,,,,,mOnScrollChanged.onScroll (l,, t, oldl,, oldt); ,,,} ,,} public 才能;void  setOnScrollChanged (OnScrollChanged onScrollChanged), { ,,,this.mOnScrollChanged =, onScrollChanged; ,,} public 才能interface OnScrollChanged  { ,,,void onScroll (l, int int t, int oldl,, int oldt); ,,} }
这样我们就可以通过实现> public interface OnScrollChanged { ,,,void onScroll (l, int int t, int oldl,, int oldt); , ,,,void ondraw (boolean isDown); 以前,,}>
然后重写onTouchEvent方法
@Override public 才能;boolean  onTouchEvent (MotionEvent ev), { ,,,,,switch (ev.getAction ()), { ,,,,,case MotionEvent.ACTION_UP: ,,,,,case MotionEvent.ACTION_CANCEL: ,,,,,,,if (mOnScrollChanged !=, null), { ,,,,,,,,,mOnScrollChanged.onTouch(假); ,,,,,,,} ,,,,,,,休息; ,,,,,case MotionEvent.ACTION_DOWN: ,,,,,case MotionEvent.ACTION_MOVE: ,,,,,,,if (mOnScrollChanged !=, null), { ,,,,,,,,,mOnScrollChanged.onTouch(真正的); ,,,,,,,} ,,,,,,,休息; ,,,} ,,,return super.onTouchEvent (ev); 以前,,}>这里的isDown=true代表是按下或者滑动的状态,对应ACTION_DOWN和ACTION_MOVE,假的代表ACTION_UP和ACTION_CANCEL
下面使用这个自定义的scrollerview
//静止状态 private final  static int SCROLL_STATE_IDLE =, 1;//拖动或者惯性滑动状态 private final  static int SCROLL_STATE_SCROLL =, 2; ,//判断是否是拖动状态 boolean isDragState =,假; , int currentState =, SCROLL_STATE_IDLE; ,//这里采用100毫秒来判断是否已经是静止状态,100 ms结束后证明是静止状态 时间=private CountDownTimer  scrollCountTimer new CountDownTimer (100, 1), { ,,@Override ,,,public void onTick (long millisUntilFinished), { , ,,,} , ,,@Override ,,,public void onFinish (), { ,,,,,setScrollState (SCROLL_STATE_IDLE); ,,,} }; , private void  initScrollView (), { ,,,scrollView.setOnScrollChanged (new MyScrollView.OnScrollChanged (), { ,,,,@Override null null null null null null null null null null null null null null null null null null null null null null null null nullAndroid scrollview监听滑动状态的方法