项目Github链接:https://github.com/licaomeng/Android-PullToRefresh-SwipeMenuListView-Sample
如果项目对您有帮助,欢迎小伙伴们在github上Star我的项目~
PullToRefresh是一个非常完美的下拉刷新的开源项目,SwipeMenuListView是一个向左滑动ListView中item实现可以删除功能的开源项目。笔者在此将两套开源项目整合形成一套,类似于手机qq那样同时支持下拉刷新和向左滑动的列表。效果如下:

两套框架整合的关键在于对Touch事件处理的把握,Touch事件的处理主要由Action_Down, Action_Move,Action_Up组成。Action_Down表示用户按下屏幕的操作,Action_Up表示用户按下屏幕后抬起的操作,Action_Move表示用户在屏幕上的移动操作。Touch事件处理流程图如下:
1. 当ACTION_UP事件生效的时候,判断如果是下拉操作,执行onRefresh(), 实现下拉刷新,然后执行resetHeaderHeight()恢复Header的高度;判断如果是上拉操作,当mFooterView的高度大于自定义的高度,那么就执行startLoadMore()加载更多,然后执行resetFooterHeight()恢复Footer的高度。判断如果是侧滑那么就结束SwipeMenu的滑动。
2. 当ACTION_MOVE事件生效的时候,分别记录X,Y方向上的偏移。如果是X方向上的偏移,那么对应的就是SwipeMenuListView的特效操作;如果是Y方向上的偏移, Y方向向下,那么对应的就是下拉刷新操作,Y方向向上,那么对应的就是上拉操作。
Touch事件相关代码如下:
@Override
public boolean onTouchEvent(MotionEvent ev) {
if (mLastY == -1) {
mLastY = ev.getRawY();
}
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
mLastY = ev.getRawY();
int oldPos = mTouchPosition;
mDownX = ev.getX();
mDownY = ev.getY();
mTouchState = TOUCH_STATE_NONE;
mTouchPosition = pointToPosition((int) ev.getX(), (int) ev.getY());
if (mTouchPosition == oldPos && mTouchView != null && mTouchView.isOpen()) {

本文介绍如何整合PullToRefresh和SwipeMenuListView开源项目,创建一个类似手机QQ的列表,支持下拉刷新和向左滑动删除功能。关键在于理解和处理Touch事件,包括ACTION_DOWN, ACTION_MOVE和ACTION_UP。通过监听Y轴偏移实现下拉刷新和上拉加载更多,X轴偏移则用于侧滑菜单。详细Touch事件处理代码和项目源码链接已提供。"
132074425,19453851,ASIC与FPGA开发:性能、功耗与灵活性对比,"['ASIC开发', 'FPGA开发', '硬件设计', '数字电路', '性能优化']
最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



