你的位置:首页 > 软件开发 > 操作系统 > 安卓listView实现下拉刷新上拉加载滑动仿QQ的删除功能

安卓listView实现下拉刷新上拉加载滑动仿QQ的删除功能

发布时间:2015-05-07 16:00:45
大家对这些功能都是看的多了,然后对上拉刷新和下拉加载的原理都是非常清楚的,所以实现这功能其实也就是为了让大家能够从众多的同行们来进行比较学习而已,虽然即使是这样,但是面试的时候面试官还是会问你上拉和下拉是怎么实现的,滑动删除功能是怎么实现,其实要实现这些功能又不是唯一的方法,但是 ...

安卓listView实现下拉刷新上拉加载滑动仿QQ的删除功能

        大家对这些功能都是看的多了,然后对上拉刷新和下拉加载的原理都是非常清楚的,所以实现这功能其实也就是为了让大家能够从众多的同行们来进行比较学习而已,虽然即使是这样,但是面试的时候面试官还是会问你上拉和下拉是怎么实现的,滑动删除功能是怎么实现,其实要实现这些功能又不是唯一的方法,但是基本上思想都是一致的。然后gitup上的这些例子是非常的多,然后实现的也是大同小异但是也不能不让我们去球童存异。作为天朝的程序员即使是一个伸手党也不必太觉得羞耻,能把别人的东西来改一改或者沿用别人的思想来模仿也是不错的。然后公司的项目也可能不建议直接去导入XlistView来实现下拉的功能,所以我们可能就需要自己去实现一些这样的功能了,废话不多说,稍微就介绍下原理,主要还是代码为主,即使看到代码和别人大同小异也不要计较,因为这些功能纯粹就是模仿好了,当然参考别人的代码也不是什么丢脸的事,关键的是对自己有帮助就好了啊。

  我们要写这样一个功能当然的先从自定义的listView开始了,说起来其实就是一个组合控件,它就由3部分组成:head 、content、footer,所以我们的代码也就可以分开来实现了额。先我们写头部的布局和功能。

xlistview_header.

<?<LinearLayout         android:layout_width="match_parent"        <ImageViewpublic ZListViewHeader(Context context) {private void initView(Context context) {public void setVisiableHeight(int height) {//设置头部可视高度public void hide() {</LinearLayout>import android.content.Context;import com.socks.zlistview.R;// 正常状态LinearLayout moreView = (LinearLayout) LayoutInflater.from(context)/**switch (state) {case STATE_LOADING:}public void setBottomMargin(int height) {public int getBottomMargin() {public void hide() {public void onOpen(ZSwipeItem layout);public void onStartClose(ZSwipeItem layout);public void onClose(ZSwipeItem layout);public void onUpdate(ZSwipeItem layout, int leftOffset, int topOffset);public void onHandRelease(ZSwipeItem layout, float xvel, float yvel);import java.util.ArrayList;import android.annotation.SuppressLint;protected static final String TAG = "ZSwipeItem";private List<OnSwipeLayoutListener> mOnLayoutListeners;

通过swipeItem.addSwipeListener()可以给滑动item添加各种事件监听,推荐使用SimpleSwipeListener的匿名类,这样就可以只重写自己关心的事件,onOpen和onClose是打开关闭的时候调用,onStartXX则是在动作一开始就调用,因此,如果需要改变后面布局的状态,请在onStartXX的时候调用,onHandRelease()则是在用户手指离开屏幕的时候调用,参数layout是事件发生的ZSwipeItem对象、xvel和yvel则是手势放开瞬间,x和y方向的加速度。onUpdate()在滑动的时候一直会调用,leftOffset和topOffset是距离左上角坐标的距离。Editor editor=sp.edit();public void setPosition(int position) {}@Override}@Override}}listView.setPullLoadEnable(true);@Override}});@Override

里面的难点就是SwipeLayout里面奋力出来的,那里面条目是不只有删除功能还有打开功能或其他,所以就是条目的滑动是最难理解,因此,当我们的item被滑动的时候,就会不断的调用这个onLayout方法,我们判断当前打开的position,然后恢复现场即可。然后项目里不再是我们常见的scrollListener,看代码才知道ViewTreeObserver里面实现了OnScrollChangedListener,smooth代表是否是平滑移动的,如果是的话,就调用了ViewDragHelper.smoothSlideViewTo()。其实在ViewDragHelper里面有一个Scroller,这个方法就是通过Scroller类来实现的,但是只这样写还不行,我们还需要重写computeScroll(),然后用下面的代码,让滚动一直持续下去,否则View是不会滚动起来的。如果不是smooth的话,就直接layout(),把View的位置定位过去了。这里面的item的实现参考了大神凯子哥(http://blog.csdn.net/zhaokaiqiang1992/article/details)的项目,然后里面的一些bug进行了修复,但是发现还是有bug的,虽然左右滑动条目然后listView上下滚动的冲突修复了,但是还是感觉有些小问题,但是绝对是可以直接项目里使用。

源码下载:点击打开链接

醉了,要睡觉了。。


 

海外公司注册、海外银行开户、跨境平台代入驻、VAT、EPR等知识和在线办理:https://www.xlkjsw.com

原标题:安卓listView实现下拉刷新上拉加载滑动仿QQ的删除功能

关键词:ie

ie
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。