Android scrollview监听滑动状态的方法

  介绍

这篇文章给大家分享的是有关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   null

Android scrollview监听滑动状态的方法