美文网首页
仿淘宝-商品浏览ScrollViewContainer

仿淘宝-商品浏览ScrollViewContainer

作者: jacky123 | 来源:发表于2016-07-06 10:43 被阅读1216次

    效果

    设计思想

    1. 在布局中放置两个 ScrollView,并分别为其设置 OnTouchListener,时刻判断 ScrollView 的滚动距离,一旦第一个ScrollView滚动到底部,
      则标识改为可向上拖动,此时开始记录滑动距离 mMoveLen,根据 mMoveLen 重新 layout 两个 ScrollView;
      同理,监听第二个 ScrollView 是否滚动到顶部,以往下拖动。
    2. 在 ScrollViewContainer 的 dispatchTouchEvent 中对控制 mMoveLen(布局移动的变化),在 ACTION_MOVE,ACTION_UP 重新Layout布局。
      两个ScrollView的layout参数统一由 mMoveLen 决定。
        @Override
        protected void onLayout(boolean changed, int l, int t, int r, int b) {
            topView.layout(0, (int) mMoveLen, mViewWidth,topView.getMeasuredHeight() + (int) mMoveLen);
            bottomView.layout(0, topView.getMeasuredHeight() + (int) mMoveLen, mViewWidth, topView.getMeasuredHeight() + (int) mMoveLen
                            + bottomView.getMeasuredHeight());
        }
    

    感悟

    1. 如何判断 ScrollView 滑到最低下和最上面?
    private OnTouchListener topViewTouchListener = new OnTouchListener() {
    
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            ViewGroup sv = (ViewGroup) v;
            
            //判断ScrollView滑到最低下了,sv.getScrollY()是一个大于0的 int 值整数,我们可以理解为盖板向下移动了。显示的下面的内容;
            //或者内容向上移动了,其实就是一个相对移动的过程。
            if (sv.getScrollY() == (sv.getChildAt(0).getMeasuredHeight() - sv.getMeasuredHeight()) && mCurrentViewIndex == 0)
                canPullUp = true;
            else
                canPullUp = false;
            return false;
        }
    };
    

    源码地址

    ScrollViewContainer

    相关文章

      网友评论

          本文标题:仿淘宝-商品浏览ScrollViewContainer

          本文链接:https://www.haomeiwen.com/subject/yurkjttx.html