pulltoRefreshSwipeMenuListview-带侧滑的可下拉刷新、上拉加载更多的控件

pulltoRefreshSwipeMenuListview 是一个带侧滑功能的可刷新控件,其缺点是该控件继承自listview,不能扩展到其他控件,优点是:使用方便,简单
其原理是:复写了listview,并复写其setAdapter方法,在为listview设置adapter的时候,为每一个item设置一个menu的adapter
@Override
public void setAdapter(ListAdapter adapter) {
if (mIsFooterReady == false) {
mIsFooterReady = true;
addFooterView(mFooterView);
}
// super.setAdapter(new SwipeMenuAdapter(getContext(),adapter){
// @Override
// public void createMenu(SwipeMenu menu) {
// super.createMenu(menu);
// }
// });
super.setAdapter(new SwipeMenuAdapter(getContext(), adapter) {
@Override
public void createMenu(SwipeMenu menu) {
if (mMenuCreator != null) {
mMenuCreator.create(menu);
}
}

        @Override
        public void onItemClick(SwipeMenuView view, SwipeMenu menu, int index) {
            if (mOnMenuItemClickListener != null) {
                mOnMenuItemClickListener.onMenuItemClick(view.getPosition(), menu, index);
            }
            if (mTouchView != null) {
                mTouchView.smoothCloseMenu();
            }
        }
    });
}
同时,实现了onScrollListener接口,监听用户的滑动操作
如果横向滑动的距离大于垂直滑动,这判断为侧滑,反之则是上拉或者下滑
 if (Math.abs(dy) > MAX_Y) {
                    mTouchState = TOUCH_STATE_Y;
                } else if (dx > MAX_X) {
                    mTouchState = TOUCH_STATE_X;
                    if (mOnSwipeListener != null) {
                        mOnSwipeListener.onSwipeStart(mTouchPosition);
                    }
                }

如果为侧滑:
 if (mTouchState == TOUCH_STATE_X) {
     if (mTouchView != null) {
         mTouchView.onSwipe(ev);
         if (!mTouchView.isOpen()) {
             mTouchPosition = -1;
             mTouchView = null;
             }
         }
         if (mOnSwipeListener != null) {
             mOnSwipeListener.onSwipeEnd(mTouchPosition);
         }
         ev.setAction(MotionEvent.ACTION_CANCEL);
         super.onTouchEvent(ev);
         return true;
  }

通过View view = getChildAt(mTouchPosition - getFirstVisiblePosition());获取item的view

通过onTouchEvent监听用户的滑动操作,如果是点击的listview内部
public boolean onSwipe(MotionEvent event) {
mGestureDetector.onTouchEvent(event);
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
mDownX = (int) event.getX();
isFling = false;
break;
case MotionEvent.ACTION_MOVE:
// Log.i(“byz”, “downX = ” + mDownX + “, moveX = ” + event.getX());
int dis = (int) (mDownX - event.getX());
if (state == STATE_OPEN) {
dis += mMenuView.getWidth();
}
swipe(dis);
break;
case MotionEvent.ACTION_UP:
if (isFling || (mDownX - event.getX()) > (mMenuView.getWidth() / 2)) {
// open侧滑菜单
smoothOpenMenu();
} else {
// close侧滑菜单
smoothCloseMenu();
return false;
}
break;
}
return true;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值