Android:ScrollView 或 NestedScrollView垂直循环滚动

1、自定义ScrollView 

public class MyScrollView extends NestedScrollView {
    private boolean noScroll = true;

    //定义一个接口的对象
    private ScrollViewListener scrollViewListener = null;

    public MyScrollView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public void setNoScroll(boolean noScroll) {
        this.noScroll = noScroll;
    }

    @Override
    public boolean onTouchEvent(MotionEvent arg0) {
        if (noScroll) {
            return false;
        } else {
            return super.onTouchEvent(arg0);
        }
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent arg0) {
        if (noScroll)
            return false;
        else
            return super.onInterceptTouchEvent(arg0);
    }

    //对外提供接口回调的方法
    public void setScrollViewListener(ScrollViewListener scrollViewListener) {
        this.scrollViewListener = scrollViewListener;
    }

    @Override
    protected void onScrollChanged(int l, int t, int oldl, int oldt) {
        super.onScrollChanged(l, t, oldl, oldt);
        //scrollview的起始点+总高度==crollView的computeVerticalScrollRange
//        if(getScrollY() + getHeight() ==  computeVerticalScrollRange())
//        {
//            LogUtil.d("------滚动到最下方------");
//            if(scrollViewListener!=null){
//                scrollViewListener.onScrollChanged();
//            }
//        }
        int scrollY = getScrollY();
        View onlyChild = getChildAt(0);
        if (onlyChild.getHeight() <= scrollY + getHeight()) {   // 如果满足就是到底部了
            LogUtil.d("------滚动到最下方------");
            if (scrollViewListener != null) {
                scrollViewListener.onScrollChanged();
            }
        }
    }
}

2、监听ScrollView滚动到底部

 mScrollView.setNoScroll(true);
        mScrollView.setScrollViewListener(new ScrollViewListener() {
            @Override
            public void onScrollChanged() {
                //5秒后之后,发送,每隔5秒发送一次
                mScrollDisposable = Observable.interval(5, 5, TimeUnit.SECONDS)
                        .observeOn(AndroidSchedulers.mainThread())
                        .subscribe(new Consumer<Long>() {
                            @Override
                            public void accept(Long aLong) throws Exception {
                                mScrollView.scrollTo(0, 0);
                                scrollPosition = 0;
                                mScrollDisposable.dispose();
                                mScrollDisposable = null;
                            }
                        });
            }
        });

3、一次滚动的距离

 //设置定时器自动滚动
    public void startAutoPost() {
        if (mAutoTaskRight != null && !mAutoTaskRight.isDisposed()) {
            mAutoTaskRight.dispose();
        }
        mAutoTaskRight = Observable.interval(1, 1, TimeUnit.SECONDS).observeOn(AndroidSchedulers.mainThread()).subscribe(new Consumer<Long>() {
            @Override
            public void accept(Long aLong) throws Exception {
        

                scrollPosition += 50;
                LogUtil.d("scrollPosition:" + scrollPosition);
                mScrollView.scrollTo(0, scrollPosition);
            }
        });

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值