我把viewpage放在listview中第一行,然后viewpage就不能左右滑动了不知道要如何做才能让viewpage在listview中可以正常左右滑动呢?

解决方案 »

  1.   

    重写ListView的触摸时间   估计ListView处理完自己的滑动时间 就不往下发了   因为它是View 不是ViewGroup   消费了触摸时间不需要继续下发  所以你的viewpage是接收不到触摸事件的(没有实际的分析,可能会有出入或者错误  仅供参考)
      

  2.   

    http://download.csdn.net/detail/shen332401890/5290671
      

  3.   


    拦截响应onTouchEvent处理横向滑动事件就行啦
    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);
        }