监听ScrollView滑动停止后,滚动条的位置,是在最左?最右?其它地方?

1,先定制HorizontalScrollView

import android.content.Context;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.widget.HorizontalScrollView;

public  class ScrollViewCustom  extends HorizontalScrollView
{
     private Runnable scrollerTask;
     private  int intitPosition;
     private  int newCheck = 100;
     private  int childWidth = 0;

     public  interface OnScrollStopListner
    {
         /**
         * scroll have stoped
         
*/
         void onScrollStoped();
         /**
         * scroll have stoped, and is at left edge
         
*/
         void onScrollToLeftEdge();
         /**
         * scroll have stoped, and is at right edge
         
*/
         void onScrollToRightEdge();
         /**
         * scroll have stoped, and is at middle
         
*/
         void onScrollToMiddle();
    }

     private OnScrollStopListner onScrollstopListner;

     public ScrollViewCustom(Context context, AttributeSet attrs)
    {
         super(context, attrs);
        scrollerTask =  new Runnable()
        {
            @Override
             public  void run()
            {
                 int newPosition = getScrollX();
                 if (intitPosition - newPosition == 0)
                {
                     if(onScrollstopListner ==  null)
                    {
                         return;
                    }
                    onScrollstopListner.onScrollStoped();
                    Rect outRect =  new Rect();
                    getDrawingRect(outRect);
                     if(getScrollX() == 0)
                    {
                        onScrollstopListner.onScrollToLeftEdge();
                    }
                     else  if(childWidth + getPaddingLeft() + getPaddingRight() == outRect.right)
                    {
                        onScrollstopListner.onScrollToRightEdge();
                    }
                     else
                    {
                        onScrollstopListner.onScrollToMiddle();
                    }
                }  else
                {
                    intitPosition = getScrollX();
                    postDelayed(scrollerTask, newCheck);
                }
            }
        };
    }
    

     public  void setOnScrollStopListner(OnScrollStopListner listner)
    {
        onScrollstopListner = listner;
    }

     public  void startScrollerTask()
    {
        intitPosition = getScrollX();
        postDelayed(scrollerTask, newCheck);
        checkTotalWidth();
    }
     private  void checkTotalWidth()
    {
         if(childWidth > 0)
        {
             return;
        }
         for( int i = 0; i < getChildCount(); i++)
        {
            childWidth += getChildAt(i).getWidth();
        }
    }

2,使用

     protected  void onCreate(Bundle savedInstanceState)
    {
         final ScrollViewCustom scrollView;
        scrollView.setOnTouchListener( new OnTouchListener()
        {
             public  boolean onTouch(View v, MotionEvent event)
            {
                 if (event.getAction() == MotionEvent.ACTION_UP)
                {
                    scrollView.startScrollerTask();
                }
                 return  false;
            }
        });
        scrollView.setOnScrollStopListner( new OnScrollStopListner()
        {
             public  void onScrollToRightEdge()
            {
            }
             public  void onScrollToMiddle()
            {
            }
             public  void onScrollToLeftEdge()
            {
            }
             public  void onScrollStoped()
            {
            }
        });

    } 

转载于:https://www.cnblogs.com/java-koma/archive/2012/11/02/2751594.html

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐