android自定义控件--条目可以左右滑动的listview

看到这个标题可能有点看不懂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方法不是接受按下的事件,而是接受从按下到滑动一下段的事件


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值