看到这个标题可能有点看不懂0.0,其实就是listview条目或者header或者footer中有可以左右滑动的控件,如:viewpager,HorizontalListView等等。
这时如果直接用listview的话会出现左右滑动很不好的感觉,需要自定义一下listview
先看下效果图:
接下来是代码:
public class MyListView extends ListView {
private static final String TAG = "MyListView";
public MyListView(Context context) {
super(context);
}
public MyListView(Context context, AttributeSet attrs) {
super(context, attrs);
setFadingEdgeLength(0);
}
public MyListView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
private float xLast, yLast;
private float xDistance,yDistance;
@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);
}
}
原理很简单:
在onInterceptTouchEvent方法中判断移动的方向从而分发事件
注:onInterceptTouchEvent方法不是接受按下的事件,而是接受从按下到滑动一下段的事件