码迷,mamicode.com
首页 > 其他好文 > 详细

ViewPager嵌套ViewPager 滑动冲突

时间:2014-09-28 22:47:16      阅读:195      评论:0      收藏:0      [点我收藏+]

标签:android   io   ar   sp   div   on   c   cti   代码   

我在网上找了许多解决方法。但都不是很完美。

当进入子viewpager确实解决了子viewpager的滑动,但是父viewpager就失效了。现在奉上修改过的代码给大家。

//别忘了布局引用也要变
/**
*    <com.jing.meknow.ChildViewPager
*        android:id="@+id/iask_main_view_pager"
*        android:layout_width="match_parent"
*     android:layout_height="0px"
  *      android:layout_weight="1"
 *       >
*    </com.jing.meknow.ChildViewPager>
*/
package com.jing.meknow;
 
import android.content.Context;
import android.graphics.PointF;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
 
public class ChildViewPager extends ViewPager {
 
 public ChildViewPager(Context context) {
  super(context);
 }
 
 public ChildViewPager(Context context, AttributeSet attrs) {
  super(context, attrs);
 }
 
 PointF downPoint = new PointF();
 OnSingleTouchListener onSingleTouchListener;
 
 @Override
 public boolean onTouchEvent(MotionEvent evt) {
  switch (evt.getAction()) {
  case MotionEvent.ACTION_DOWN:
   // 记录按下时候的坐标
   downPoint.x = evt.getX();
   downPoint.y = evt.getY();
   if (this.getChildCount() > 1) { // 有内容,多于1个时
    // 通知其父控件,现在进行的是本控件的操作,不允许拦截
     getParent().requestDisallowInterceptTouchEvent(true);
   }
   break;
  case MotionEvent.ACTION_MOVE:
   if (this.getChildCount() > 1) { // 有内容,多于1个时
    if (this.getCurrentItem() == 0 && downPoint.x < evt.getX()) {
     getParent().requestDisallowInterceptTouchEvent(false);
    } else {
     // 通知其父控件,现在进行的是本控件的操作,不允许拦截
     getParent().requestDisallowInterceptTouchEvent(true);
    }
   }
   break;
  case MotionEvent.ACTION_UP:
   // 在up时判断是否按下和松手的坐标为一个点
   if (PointF.length(evt.getX() - downPoint.x, evt.getY()
     - downPoint.y) < (float) 5.0) {
    onSingleTouch(this);
    return true;
   }
   break;
  }
  return super.onTouchEvent(evt);
 }
 
 public void onSingleTouch(View v) {
  if (onSingleTouchListener != null) {
   onSingleTouchListener.onSingleTouch(v);
  }
 }
 
 public interface OnSingleTouchListener {
  public void onSingleTouch(View v);
 }
 
 public void setOnSingleTouchListener(
   OnSingleTouchListener onSingleTouchListener) {
  this.onSingleTouchListener = onSingleTouchListener;
 }
 

ViewPager嵌套ViewPager 滑动冲突

标签:android   io   ar   sp   div   on   c   cti   代码   

原文地址:http://www.cnblogs.com/jiangzhaojing/p/3999047.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!