viewpage在listview中第一行,导致viewpage不能左右滑动
我把viewpage放在listview中第一行,然后viewpage就不能左右滑动了
不知道要如何做才能让viewpage在listview中可以正常左右滑动呢?
重写ListView的触摸时间 估计ListView处理完自己的滑动时间 就不往下发了 因为它是View 不是ViewGroup 消费了触摸时间不需要继续下发 所以你的viewpage是接收不到触摸事件的(没有实际的分析,可能会有出入或者错误 仅供参考)
public class ViewPagerInListView extends ViewPager { public ViewPagerInListView(Context context) { super(context); } public ViewPagerInListView(Context context, AttributeSet attrs) { super(context, attrs); } public boolean onInterceptTouchEvent(MotionEvent arg0) { //当拦截触摸事件到达此位置的时候,返回true, //说明将onTouch拦截在此控件,进而执行此控件的onTouchEvent return true; } /** 触摸时按下的点 **/ PointF downP = new PointF(); /** 触摸时当前的点 **/ PointF curP = new PointF(); public boolean onTouchEvent(MotionEvent arg0) { //每次进行onTouch事件都记录当前的按下的坐标 curP.x = arg0.getX(); curP.y = arg0.getY(); if(arg0.getAction() == MotionEvent.ACTION_DOWN){ downP.x = arg0.getX(); downP.y = arg0.getY(); getParent().requestDisallowInterceptTouchEvent(true); } if(arg0.getAction() == MotionEvent.ACTION_MOVE){ float dx = Math.abs(arg0.getX()-downP.x); float dy = Math.abs(arg0.getY()-downP.y); if (dy<dx) { //此句代码是为了通知他的父ViewPager现在进行的是本控件的操作,不要对我的操作进行干扰 getParent().requestDisallowInterceptTouchEvent(true); } else { getParent().requestDisallowInterceptTouchEvent(false); } } if(arg0.getAction() == MotionEvent.ACTION_UP){ getParent().requestDisallowInterceptTouchEvent(false); float dx = Math.abs(arg0.getX()-downP.x); float dy = Math.abs(arg0.getY()-downP.y); if (dy<dx) { // 向右 if (arg0.getX()-downP.x>0) { what.getAndAdd(-1); if (what.get() < 0) { what.getAndAdd(imageViews.size()); } viewHandler.sendEmptyMessage(what.get()); } else { what.incrementAndGet(); if (what.get() > imageViews.size() - 1) { what.getAndAdd(-imageViews.size()); } viewHandler.sendEmptyMessage(what.get()); } } if (dx==0&&dy==0) { Intent intent = new Intent(); intent.putExtra("id",""+curTitleShowId); intent.putExtra("title",""+curTitle); intent.putExtra("typeTilte",""+title); intent.setClass(act, NewsInfoActivity.class); act.startActivity(intent); act.overridePendingTransition(R.anim.push_left_in,R.anim.push_left_out); } } return super.onTouchEvent(arg0); } }
拦截响应onTouchEvent处理横向滑动事件就行啦
|