android Scrollview嵌套PinnedHeaderExpandableListView并且可以实现悬浮窗

来源:互联网 发布:js获取相同class的div 编辑:程序博客网 时间:2024/06/17 16:51

1.需要实现的效果



在网上找了很久没有好的可以借用的,就想着自己动手写个吧!


主要实现逻辑:

首先测量出悬浮窗上面布局的高度,然后判断scrollview是否滑动到了这个高度,如果已经到了就把最大的高度设置成布局的高度,看代码:


@Overrideprotected void onOverScrolled(int scrollX, int scrollY, boolean clampedX, boolean clampedY) {    CrollY = scrollY;    //判断如果滑动的距离大于view的高度就直接设置成view的高度    if (scrollY >= mViewHeight){        scrollY =mViewHeight;        isRun  = false;    }    super.onOverScrolled(scrollX, scrollY, clampedX, clampedY);}


然后再跟进滑动的距离进行拦截事件,根据滑动距离判断是上滑还是下拉,看代码:

    @Override    public boolean onInterceptTouchEvent(MotionEvent ev) {        switch (ev.getAction()){            case MotionEvent.ACTION_DOWN:                dowmX = ev.getX();                dowmY = ev.getY();                mViewHeight = mView.getHeight();                scrollY = dowmY;                break;            case MotionEvent.ACTION_MOVE:                float X = ev.getX();                float Y = ev.getY();                float xx = X - dowmX;                float yy = Y - dowmY;                Log.i("TAG","Y----->"+Y);                Log.i("TAG","-----getScorll : "+getScrollY());                if (Math.abs(yy)>Math.abs(xx)&& isScroll){//                    return true;//scrollview执行滑动  Listview不滑动//                    return false;//listView滑动  scrollview不滑动                    if (!isRun && isTop){                        return false;                    }                    else if (!isRun && !isTop){                        if (scrollY < Y && (Y - scrollY) > SCROLLLIMIT){                            //往下拉                            isTop = false;                            isRun = true;                            return true;                        }else {                            if (getScrollY() == mViewHeight){                                return false;                            }                        }                    }                }                break;            case MotionEvent.ACTION_UP:                break;        }        return super.onInterceptTouchEvent(ev);    }

然后再使用的时候需要设置下:

scrollView.setView(lin_view);//设置高度为屏幕的高度ViewGroup.LayoutParams params = plvService.getLayoutParams();params.height = height;plvService.setLayoutParams(params);plvService.requestLayout();lv_content_view.setLayoutParams(params);lv_content_view.requestLayout();scrollView.isScroll(true);
注意:设置子view的高度非常重要,不然无法实现滑动效果


最后的效果:





源码下载地址:源码地址







0 0
原创粉丝点击