Android 顶部可以伸缩+头部固定+listview下拉刷新、上拉请求更多

   

     本文类型写成原创,多少有点感觉良心不安,毕竟这是通过大牛的例子综合而成,而此次修改,算是狗尾续貂,总之希望能帮到有此需求的同仁。

     该例适用于客户端的首页,标题想了半天也没能用一句话来概述,只能用几个关键字链接来表此意,可能有的朋友仍然不好理解,直接上图先:



                   主要功能点是各种touch的处理、焦点传递问题,如

    @Override
   public boolean onInterceptTouchEvent(MotionEvent event) {
int intercepted = 0;
int x = (int) event.getX();
int y = (int) event.getY();


switch (event.getAction()) {
case MotionEvent.ACTION_DOWN: {
mLastXIntercept = x;
mLastYIntercept = y;
mLastX = x;
mLastY = y;
intercepted = 0;
break;
}
case MotionEvent.ACTION_MOVE: {
int deltaX = x - mLastXIntercept;
int deltaY = y - mLastYIntercept;
if (isTop) {
// 向下滑动
if (deltaY > 0) {
// 如果listview已经滑动了很多条码,则优先把listview滑动到最上面
if (mPullDownTemplateView.pullDownView.getListView()
.getFirstVisiblePosition() != 0) {
intercepted = 0;
} else {
intercepted = 1;
}
} else {
// 向上滑动
intercepted = 0;
}
} else {
// 向下滑动
if (deltaY >= 0) {
intercepted = 0;
} else {
// 向上滑动
intercepted = 1;
}
}
// if (mStatus == STATUS_EXPANDED && deltaY <= -mTouchSlop) {
// intercepted = 1;
// } else if (mGiveUpTouchEventListener != null) {
// if (mGiveUpTouchEventListener.giveUpTouchEvent(event)
// && deltaY >= mTouchSlop) {
// intercepted = 1;
// }
// }
break;
}
case MotionEvent.ACTION_UP: {
intercepted = 0;
mLastXIntercept = mLastYIntercept = 0;
break;
}
default:
break;
}
// 返回true表示焦点不向下(子)传递,返回false表示传给子布局
Log.d(TAG, "intercepted=" + intercepted);
return intercepted != 0;
}


     该项目还可以进一步细化,把顶部的ImageView改成ViewPager,注意的是,仍需要自定义Viewpager,重写onTouchEvent(MotionEvent evt)

@Override  
    public boolean onTouchEvent(MotionEvent evt) {  
        switch (evt.getAction()) {  
        case MotionEvent.ACTION_DOWN:  
            // 记录按下时候的坐标  
            downPoint.x = evt.getX();  
            downPoint.y = evt.getY();  
            if (this.getChildCount() > 1) { //有内容,多于1个时  
                // 通知其父控件,现在进行的是本控件的操作,不允许拦截  
                getParent().requestDisallowInterceptTouchEvent(true);  
            }  
            break;  
        case MotionEvent.ACTION_MOVE:  
            if (this.getChildCount() > 1) { //有内容,多于1个时  
                // 通知其父控件,现在进行的是本控件的操作,不允许拦截  
                getParent().requestDisallowInterceptTouchEvent(true);  
            }  
            break;  
        case MotionEvent.ACTION_UP:  
            // 在up时判断是否按下和松手的坐标为一个点  
            if (PointF.length(evt.getX() - downPoint.x, evt.getY()  
                    - downPoint.y) < (float) 5.0) {  
                onSingleTouch(this);  
                return true;  
            }  
            break;  
        }  
        return super.onTouchEvent(evt);  
    }  


    源码地址 http://download.csdn.net/detail/zhangyaobin_1989/8628607








   















评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值