ViewPager嵌套一個ViewPager典型的就是嵌套一個輪播圖,但是在低版本的裏層的ViewPager,是無法滑動的!
因爲外層的ViewPager,會攔截觸屏事件(TouchEvent)
通過重寫裏層控件的onTouchEvent方法,調用其父控件的requestDisallowInterceptTouchEvent()方法;使其父控件,不攔截觸屏事件(TouchEvent),以此,便能達到裏層的ViewPager,也能滑動的效果了。
package com.example.administrator.googleplay.views;
import android.content.Context;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
/**
* 作者:Created by Kevin on 2016/2/1.
* 郵箱:[email protected]
* 描述:複寫子ViewPager,解決在低版本下ViewPager嵌套的問題
*/
public class InnerViewPager extends ViewPager{
private float startX;
private float startY;
public InnerViewPager(Context context) {
super(context);
}
public InnerViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean onTouchEvent(MotionEvent ev) {
switch (ev.getAction()){
case MotionEvent.ACTION_DOWN:
startX = ev.getRawX();
startY = ev.getRawY();
break;
case MotionEvent.ACTION_MOVE:
//判斷是左右滑動還是上下滑動
float endX = ev.getRawX();
float endY = ev.getRawY();
if (Math.abs(endX - startX) > Math.abs(endY - startY) ){
//如果是左右滑動,請求父控件不要攔截自己的
getParent().requestDisallowInterceptTouchEvent(true);
}else {
//如果是上下滑動,攔截設置爲false
getParent().requestDisallowInterceptTouchEvent(false);
}
break;
case MotionEvent.ACTION_UP:
break;
default:
break;
}
return super.onTouchEvent(ev);
}
}
遇到的錯誤:
犯了一個低級錯誤,沒有加這個構造方法,導致在xml文件中不能使用
public InnerViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}