Android 打造上下滑动翻屏VScrollScreenLayout

开篇

  在工作之余,撸了一个上下滑动翻屏的组件分享给大家。

屏幕截图

Android 打造上下滑动翻屏VScrollScreenLayout_第1张图片

立即体验

扫描以下二维码下载体验App(从0.2.3版本开始,体验App内嵌版本更新检测功能):


JSCKit库传送门:https://github.com/JustinRoom/JSCKit

源码简析

attrs:

    
        
        
        
        
    
    private float ySlideRatio;//上下滑动比率
    private float flipRatio;//翻页的最小滑动距离比率。
    private int reboundAnimTime;//回弹的动画时间。默认为300毫秒
    private int flipAnimTime;//翻页的动画时间。默认为500毫秒

翻屏的最小距离:distance = 屏高度 * flipRatio

    private void rebound() {
        int scrollY = getScrollY();
        int oldScrollY = curPageIndex * pageHeight;
        int diffY = scrollY - oldScrollY;
        int reboundHeight;
        int tempFlipAnimTime = reboundAnimTime;
        //向上翻页
        if (scrollY < oldScrollY) {
            //第一页(或者上翻距离不够最少翻页距离),松手回弹
            if (curPageIndex == 0 || Math.abs(diffY) < pageHeight * flipRatio)
                reboundHeight = diffY;
            else {//翻到上一页
                curPageIndex--;
                reboundHeight = scrollY - curPageIndex * pageHeight;
                tempFlipAnimTime = flipAnimTime;
                if (onScrollPageChangedListener != null)
                    onScrollPageChangedListener.onScroll(getContext(), curPageIndex);
            }
        }
        //向下翻页
        else {
            //最后一页(或者上翻距离不够最少翻屏距离),松手回弹
            if (curPageIndex == getChildCount() - 1 || Math.abs(diffY) < pageHeight * flipRatio) {
                reboundHeight = diffY;
            } else {//翻到下一页
                curPageIndex++;
                reboundHeight = scrollY - curPageIndex * pageHeight;
                tempFlipAnimTime = flipAnimTime;
                if (onScrollPageChangedListener != null)
                    onScrollPageChangedListener.onScroll(getContext(), curPageIndex);
            }
        }
        mScroller.startScroll(0, scrollY, 0, -reboundHeight, tempFlipAnimTime);
        invalidate();
    }

简单使用

  • 1、add(View child)
        VScrollScreenLayout screenLayout;
        for (int i = 0; i < 5; i++) {
            View page = new View(this);
            ...
            screenLayout.addView(page);
        }
  • 2、xml中使用


    
    

        

        

        

    
    ...

翻页监听

        scrollScreenLayout.setOnScrollPageChangedListener(new VScrollScreenLayout.OnScrollPageChangedListener() {
            @Override
            public void onScroll(Context context, int pageIndex) {
                Toast.makeText(context, "The current page is " + (pageIndex + 1), Toast.LENGTH_SHORT).show();
            }
        });

篇尾

  如果您觉得还不错的话,点个赞(或加个关注)啰!QQ:1006368252

态度决定高度,细节决定成败!

你可能感兴趣的:(Android 打造上下滑动翻屏VScrollScreenLayout)