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嵌套(内层ViewPager直接实现类继承了兼容ListView滑动的父类)
- Viewpager嵌套内层滑动不起作用?
- 当ListView中嵌套ViewPager滑动冲突问题
- Listview 嵌套 Viewpager 滑动冲突的解决
- ViewPager 嵌套 ListView实现简单动态滑动
- 一个 ScrollView 里面包含 viewpager 嵌套 listview 或 RecyclerView 极少代码实现的流畅滑动效果 处理一个两层滑动 view 的自定义布局,以最少的代码实现,
- android滑动组件嵌套一般思路,多任务手势思路,触摸传递思路,【例】listview嵌套viewpager
- Android自定义LinearLayout实现左右侧滑菜单,完美兼容ListView、ScrollView、ViewPager等滑动控件
- 简单完美解决PullToRefreshLayout中PullableListView嵌套ViewPager时滑动冲突的问题
- ViewPager嵌套ViewPager,外层禁止滑动,内层不禁止会出现的问题
- android listview左右滑动分页(viewpager嵌套listview进行分页),焦点图带圆焦点
- listview嵌套viewpager 滑动冲突问题
- Android listview嵌套viewpager滑动冲突问题
- Android中解决ListView嵌套Viewpager时,滑动事件冲突的方法
- 解决ListView嵌套ViewPager滑动不了的问题
- Scrollview中嵌套ViewPager中嵌套ListView 滑动中tab固定顶部ScrollingTricks效果特效
- android listview左右滑动分页(viewpager嵌套listview进行分页),焦点图带圆焦点
- Scrollview中嵌套ViewPager中嵌套ListView 滑动中tab固定顶部ScrollingTricks效果特效
- Android ViewPager、ScrollView或ListView嵌套WebView滑动冲突
- ListView中嵌套ViewPager滑动事件冲突