您的位置:首页 > 移动开发 > Android开发

Android解决ListView头ViewPager事件冲突问题

2016-05-17 11:26 891 查看
在LIstView添加addHeader()时,会出现事件冲突,比较好的解决方法包括两种,一种是自定义ListView,重写他的拦截方法,另外一种就是自定义ViewPager。

package com.example.testa;

import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.ListView;

public class DefinedListView extends ListView {

public DefinedListView(Context context) {
super(context);
}

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

public DefinedListView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}

private float xDistance, yDistance, xLast, yLast;

@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
xDistance = yDistance = 0f;
xLast = ev.getX();
yLast = ev.getY();
break;
case MotionEvent.ACTION_MOVE:
final float curX = ev.getX();
final float curY = ev.getY();
xDistance += Math.abs(curX - xLast);
yDistance += Math.abs(curY - yLast);
xLast = curX;
yLast = curY;
if (xDistance > yDistance) {
return false;
}
}
return super.onInterceptTouchEvent(ev);
}
} 下面用ViewPager实现
public class MyViewPager extends ViewPager {

public MyViewPager(Context context) {
super(context);
}

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

@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
getParent().requestDisallowInterceptTouchEvent(true);//这句话的作用 告诉父view,我的单击事件我自行处理,不要阻碍我。
return super.dispatchTouchEvent(ev);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: