您的位置:首页 > 其它

ViewPager嵌套(内层ViewPager可以滑动之父类兼容listView)

2016-10-26 09:30 295 查看
package com.peopledailychina.activity.widget;

import android.content.Context;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.ViewGroup;

/**
* viewpage 和listview 相互冲突 将父view 传递到viewpage 里面 使用父类的方法
* parent.requestDisallowInterceptTouchEvent(true); 当
* requestDisallowInterceptTouchEvent 如果为true的时候 表示:父view 不拦截子view的touch 事件
* 这个方法只是改变flag
*/
public class FinalViewPager extends ViewPager {
private ViewGroup parent;

private float startX;
private float startY;
private float lastX;
private float lastY;
private float endX;
private float endY;
public boolean isFixTouch = true;

enum Orientation {
VERTICAL, HORIZONTAL;
}

public FinalViewPager(Context context) {
super(context);
// TODO Auto-generated constructor stub
}

public FinalViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}

@Override
protected void onAttachedToWindow() {
// TODO Auto-generated method stub
super.onAttachedToWindow();
this.parent = (ViewGroup) getParent();
}

public void setNestedpParent(ViewGroup parent) {
this.parent = parent;
}

@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
if (isFixTouch) {

if (parent == null) {
return super.dispatchTouchEvent(ev);
}
float x = ev.getX();
float y = ev.getY();

switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
parent.requestDisallowInterceptTouchEvent(true);
break;
case MotionEvent.ACTION_MOVE:
float moveX = x - lastX;
float moveY = y - lastY;
if (Math.abs(moveX) / Math.abs(moveY) > 1) {
parent.requestDisallowInterceptTouchEvent(true);
} else {
parent.requestDisallowInterceptTouchEvent(false);
}
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
break;
default:
break;
}
lastX = x;
lastY = y;
}
return super.dispatchTouchEvent(ev);
}

public boolean isFixTouch() {
return isFixTouch;
}

public void setFixTouch(boolean fixTouch) {
isFixTouch = fixTouch;
}
// @Override
// public boolean onTouchEvent(MotionEvent arg0) {
// // TODO Auto-generated method stub
// switch (arg0.getAction()) {
// case MotionEvent.ACTION_UP:
// case MotionEvent.ACTION_CANCEL:
// return true;
// default:
// break;
// }
// return super.onTouchEvent(arg0);
// }

private Orientation getScrollOrientation(MotionEvent ev) {
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
startX = ev.getX();
startY = ev.getY();

break;
case MotionEvent.ACTION_MOVE:
float moveX = ev.getX() - startX;
float moveY = ev.getY() - startY;
if (Math.abs(moveX) >= Math.abs(moveY)) {
return Orientation.HORIZONTAL;
}

break;
case MotionEvent.ACTION_UP:
startX = 0;
startY = 0;

break;
default:
break;
}
return Orientation.VERTICAL;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  viewpager
相关文章推荐