listview与viewpager焦点冲突时,在自定义的listview中使用下面的方法 可以解决焦点冲突的问题,问题定当迎刃而解!
//用于解决内部包含viewpager时,焦点冲突问题
public class MyListView extends ListView
{
private float mX, mY;
public MyListView(Context context)
{
super(context);
}
public MyListView(Context context, AttributeSet attrs)
{
super(context, attrs);
}
public MyListView(Context context, AttributeSet attrs, int defStyle)
{
super(context, attrs, defStyle);
}
//覆盖拦截器。如果是横向滑动,则不进行拦截,将事件传递给内部的ViewPager。
@Override
public boolean onInterceptTouchEvent(MotionEvent event)
{
float offX, offY;
switch (event.getAction())
{
case MotionEvent.ACTION_DOWN:
mX = event.getX();
mY = event.getY();
break;
case MotionEvent.ACTION_CANCEL:
case MotionEvent.ACTION_UP:
break;
case MotionEvent.ACTION_MOVE:
offX = event.getX() - mX;
offY = event.getY() - mY;
if (Math.abs(offX) > Math.abs(offY)) {// 横向滑动,不对事件进行拦截。
if (Math.abs(offY) > 50) { // 过滤掉小的纵向滑动,消除listview的抖动现象。
super.onInterceptTouchEvent(event);
}
return false;
}
break;
}
return super.onInterceptTouchEvent(event);
}
}