又到了更新博客的时间了,今天给大家带来的是ListView侧滑出现删除等按钮的效果。相信大家在平时玩app的时候都接触过这种效果吧。比如说QQ聊天列表侧滑就会出现“置顶”、“标为已读”、“删除”等按钮。这篇博文将用ViewDragHelper这个神器来实现侧滑效果。友情链接一下之前写的博文使用ViewDragHelper来实现侧滑菜单的,点击此处跳转。如果你对ViewDragHelper不熟悉,你可以去看看鸿洋_的《Android ViewDragHelper完全解析 自定义ViewGroup神器》。
好了,话说的那么多,先来看看我们实现的效果图吧:
可以看出来,我们实现的和QQ的效果相差无几。下面就是源码时间了。
先来看一下ListView的item的slip_item_layout.xml
:
1 | <?xml version="1.0" encoding="utf-8"?> |
我们可以看出,要先把侧滑出的按钮布局放在SwipeListLayout的第一层,而item的布局放在第二层。还有一点要注意的是,侧滑出的按钮如果有两个或两个以上,那么必须用ViewGroup作为父布局。要整体保持SwipeListLayout的直接子View为2个。
而activity的布局文件里就是一个ListView,这里就不再给出了。
下面我们直接来看看SwipeListLayout的内容:
1 | public SwipeListLayout(Context context) { |
我们主要来看callback,首先在tryCaptureView(View view, int arg1)
里设置了只有是itemView的时候才能被捕获,也就是说当你去滑动“删除”、“置顶”等按钮的时候,侧滑按钮是不会被关闭的,因为根本就没捕获。(当然你也可以设置都捕获,那样的话下面的逻辑要调整了),剩余的几个函数中的逻辑较为简单,在onView
Released(View releasedChild, float xvel, float yvel)
也是判断了当手指抬起时itemView所处的位置。如果向左滑或者停止滑动时按钮已经显示出1/2的宽度,则打开;其余情况下都将关闭按钮。
以下分别是close()和open()的方法:
1 | /** |
SwipeListLayout大致的代码就这些,相信对于熟悉ViewDragHelper的同学们来说应该是不成问题的。其实整体的逻辑和之前用ViewDragHelper来实现侧滑菜单大同小异。
顺便下面贴出SwipeListLayout的全部代码:
1 | /** |
最后,提供SwipeListLayout的源码下载:
GitHub:
~have fun!~