项目的UE图中页面顶部是个轮播图,下面是个Listview,轮播图要跟着listview一起滑动,因而产生了viewpager滑动冲突,如果外层使用ScollView又要

处理listview的滑动事件,还有其上拉加载下拉刷新,中和考虑后在HeadView中加入ViewPager轮播,但是加入后滑动冲突,viewpager左右滑动无效

成下拉事件.

于是重写ViewPager

public class MyViewPager extends ViewPager{    /** 触摸时按下的点 **/    PointF downP = new PointF();    /** 触摸时当前的点 **/    PointF curP = new PointF();    public MyViewPager(Context context) {        super(context);    }    public MyViewPager(Context context, AttributeSet attrs) {        super(context, attrs);    }    @Override    public boolean onInterceptTouchEvent(MotionEvent arg0) {        if(arg0.getAction() == MotionEvent.ACTION_DOWN){            //记录按下时候的坐标            //切记不可用 downP = curP ,这样在改变curP的时候,downP也会改变            downP.x = arg0.getX();            downP.y = arg0.getY();            //此句代码是为了通知他的父Listview现在进行的是本控件的操作,不要对我的操作进行干扰            getParent().requestDisallowInterceptTouchEvent(true);        }        if (arg0.getAction()==MotionEvent.ACTION_MOVE){            getParent().requestDisallowInterceptTouchEvent(true);            L.e("滑动"+"move");            curP.x = arg0.getX();            curP.y = arg0.getY();            getParent().requestDisallowInterceptTouchEvent(true);            if (downP.x-curP.x>0){                setCurrentItem(getCurrentItem() + 1);                L.e("左滑动" + downP.x + "+" + curP.x);                return true;            }            if (downP.x-curP.x<0){                setCurrentItem(getCurrentItem() -1);                L.e("右滑动"+downP.x+"+"+curP.x);                return true;            }        }        if(arg0.getAction() == MotionEvent.ACTION_UP){            curP.x = arg0.getX();            curP.y = arg0.getY();            getParent().requestDisallowInterceptTouchEvent(true);            if (downP.x-curP.x>0){                setCurrentItem(getCurrentItem() + 1);                L.e("左滑动" + downP.x + "+" + curP.x);                return true;            }            if (downP.x-curP.x<0){                setCurrentItem(getCurrentItem() -1);                L.e("右滑动"+downP.x+"+"+curP.x);                return true;            }        }        return super.onInterceptTouchEvent(arg0);    }}
onInterceptTouchEvent中处理Viewpager的滑动事件,同时在代码中设置了Viewpager的onTouch事件

 /** 触摸时按下的点 **/    PointF downP = new PointF();    /** 触摸时当前的点 **/    PointF curP = new PointF();    private void setView() {        iv_back.setOnClickListener(this);        mVp.setOnTouchListener(new View.OnTouchListener() {            @Override            public boolean onTouch(View v, MotionEvent arg0) {                isTouch=true;                switch (arg0.getAction()) {                    case MotionEvent.ACTION_DOWN:                        downP.x = arg0.getX();                        downP.y = arg0.getY();                        break;                    case MotionEvent.ACTION_MOVE:                        if (downP.x-curP.x>0){                            L.e("左滑动"+downP.x+"+"+curP.x);                            isTouch=false;                        }                        if (downP.x-curP.x<0){                            L.e("右滑动"+downP.x+"+"+curP.x);                            isTouch=false;                        }                        break;                    case MotionEvent.ACTION_CANCEL:                    case MotionEvent.ACTION_UP:                        curP.x = arg0.getX();                        curP.y = arg0.getY();                        if (downP.x-curP.x>0){                            L.e("左滑动"+downP.x+"+"+curP.x);                            isTouch=false;                        }                        if (downP.x-curP.x<0){                            L.e("右滑动"+downP.x+"+"+curP.x);                            isTouch=false;                        }                        break;                }                return false;            }        });

只是部分代码,处理的viewpager的滑动事件

 View headView=LayoutInflater.from(RaceActivity.this).inflate(R.layout.layout_listview_head_banner,null);        AbsListView.LayoutParams params=new AbsListView.LayoutParams(AbsListView.LayoutParams.MATCH_PARENT,DisplayUtil.dp2px(150));        headView.setLayoutParams(params);        mVp= (MyViewPager) headView.findViewById(R.id.vp);        tv_title= (TextView) headView.findViewById(R.id.tv_title);        mLinearLayout= (LinearLayout) headView.findViewById(R.id.ll_container);        mWhiteView=headView.findViewById(R.id.v_guide_white_point);        lv_race.addHeaderView(headView);

给listview添加headview
由于轮播是由handler控制的,程序还待优化,只附上Viewpager的事件处理主要代码,仅供参考

更多相关文章

  1. android -- NDK 编译环境搭建
  2. 在LispWorks中使用Common Lisp语言构建iOS/Android库
  3. Android(安卓)apiDemo 学习——对话框AlertDialogSamples
  4. 使用httpclient连接https 自签名也可以
  5. Android(安卓)SDK中的Support兼容包详解
  6. [置顶] [Android(安卓)Studio 权威教程]最实用的快捷键
  7. Android强行进阶—按键事件&焦点事件攻略
  8. Android(安卓)studio 单元测试初探
  9. Delphi XE5 for Android(安卓)(七)

随机推荐

  1. android 实用sax 读取xml文件内容 附源码
  2. 通过tcpdump抓包使用Wireshark --Android
  3. android adb push 与 adb install的比较(
  4. android 终端基本命令
  5. Android ContentProvider 完全解析及DEMO
  6. Android(安卓)在Java代码中设置style属性
  7. Android 之Service
  8. Android性能优化(2):常见内存泄漏与优化(二
  9. [置顶] 【博客目录】 Start here o(∩_∩
  10. Android中m、mm、mmm、mma、mmma的区别