HorizontalScrollView 中嵌套 viewpager滑动冲突的解决

在 HorizontalScrollView 中嵌套 viewpager,viewpager不会随手势滑动,所以要复写viewpager

public class MyViewpager extends ViewPager {
	
	MyViewpager viewpager;
	private int size = -1;
	
	public MyViewpager(Context context, AttributeSet attrs) {  
        super(context, attrs);  
        // TODO Auto-generated constructor stub  
    }  
	
	@Override  
    public boolean onInterceptTouchEvent(MotionEvent p_event)  
    {  
        return true;  
    }  
	
	private PointF sp = new PointF(); 
	@Override
	public boolean onTouchEvent(MotionEvent arg0) {
		// TODO Auto-generated method stub
		int action = arg0.getAction();
		switch (action){
		case MotionEvent.ACTION_DOWN:
			sp = new PointF(arg0.getX(), arg0.getY());
			break;
		case MotionEvent.ACTION_MOVE:
			PointF ep = new PointF(arg0.getX(), arg0.getY());
			float move_x = sp.x - ep.x;
			if(!(move_x < 0 && getCurrentItem() == 0) && getParent() != null
					&& !(move_x > 0 && getCurrentItem() == getAdapter().getCount() - 1) 
					&& sp.x > 50){
				Log.i("DEBUG", "intercept move event");  
	            getParent().requestDisallowInterceptTouchEvent(true);
			}
		
		}
		
		return super.onTouchEvent(arg0);
	}
	
	


}

在手指滑动时进行判断,当不是第一页且向右滑动,也不是最后一页且向左滑动,并且ACTION_DOWN在x轴为50以上的viewpager可自行滑动

package com.example.viewhortest;

import java.util.ArrayList;

import android.app.Activity;
import android.graphics.PointF;
import android.os.Bundle;
import android.support.v4.view.PagerAdapter;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.ViewGroup;

import com.mylogin.update.view.MyViewpager;
import com.mylogin.update.view.SlidingMenu;

public class MainActivity extends Activity {

	private MyViewpager vp_start;
	private ArrayList<View> views;
	private SlidingMenu mLeftMenu ; 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
		initViewPager();
    }

    private void initViewPager() {
    	mLeftMenu = (SlidingMenu) findViewById(R.id.id_menu);
		vp_start = (MyViewpager)findViewById(R.id.vp_start);
		views = new ArrayList<View>();
		LayoutInflater inflater = getLayoutInflater();

		views.add(inflater.inflate(R.layout.ss1, null));
		views.add(inflater.inflate(R.layout.ss2, null));
		views.add(inflater.inflate(R.layout.ss3, null));
		views.add(inflater.inflate(R.layout.ss4, null));
		vp_start.setAdapter(new MyViewPager(views));
//		vp_start.requestDisallowInterceptTouchEvent(true);
//		vp_start.setOnTouchListener(new MyOntouch());
		
	}

    class MyViewPager extends PagerAdapter {
		public ArrayList<View> list;

		public MyViewPager(ArrayList<View> list) {
			this.list = list;
		}
		
		@Override
		public int getCount() {
			
			return list.size();
		}

		@Override
		public Object instantiateItem(ViewGroup container, int position) {
			container.addView(list.get(position), 0);

			
			return list.get(position);
		}

		@Override
		public void destroyItem(ViewGroup container, int position, Object object) {
			container.removeView(list.get(position));
		}

		@Override
		public boolean isViewFromObject(View arg0, Object arg1) {
			return arg0 == arg1;
		}

	}
    
}

这里是main方法。


解压压缩包以后,右键TEST,Properties-->Android,,将Is Library勾上,

然后将右键ViewHorTest,Properties-->Android-->ADD,将Test勾上就行了。


SlidingMenu是我借鉴了慕课网的视频搞得,地址在这儿

http://www.imooc.com/learn/211

里边有方法的详细说法,我就不写了。


资源地址

http://download.csdn.net/detail/u013898922/8195065


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值