android ui listview 下拉刷新,上滑动刷新效果
来源:互联网 发布:小组网络研修计划 编辑:程序博客网 时间:2024/05/01 09:56
备注:本文章是借鉴网上的很多下拉刷新的效果,自己充分理解和处理,也做了上滑动刷新效果,大家可以借鉴指正。
1) xml中listview的设置。因为是在代码中实现的listview,所以必须这样设置。
<com.oic.contract.ui.RTPullListView android:id="@+id/sms_listviews" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/sms_list_all" android:divider="@color/baseline" android:dividerHeight="1dp" android:fadeScrollbars="false" android:fastScrollEnabled= "false" android:cacheColorHint="#00000000" android:scrollbars="none" />
2) 代码中动态实现页面展示,一定要定义此类型的:
RTPullListView listview;
3) 主要就是状态的设置,根据手势变化来进行显示和隐藏foot.或者head布局。主要理解ontouchevent方法就可以了。其中三种情况的处理。
public boolean onTouchEvent(MotionEventevent) { if(isRefreshable) { switch(event.getAction()) { case MotionEvent.ACTION_DOWN: if(visibleLastIndex > 0 && !isRecored) { isRecored= true; isPush= true; startY= (int) event.getY(); Log.v(TAG,"在down时候记录当前位置‘"); } break; case MotionEvent.ACTION_UP: if(state != REFRESHING && state != LOADING) { if(state == DONE) { //什么都不做 } if(state == PULL_To_REFRESH) { state= DONE; changeHeaderViewByState(); Log.v(TAG,"由下拉刷新状态,到done状态"); } if(state == RELEASE_To_REFRESH) { state= REFRESHING; changeHeaderViewByState(); onRefresh(); Log.v(TAG,"由松开刷新状态,到done状态"); } } isRecored= false; isBack= false; break; case MotionEvent.ACTION_MOVE: inttempY = (int) event.getY(); if(!isRecored && visibleLastIndex>0 ) { Log.v(TAG,"在move时候记录下位置"); isRecored= true; startY= tempY; } if(state != REFRESHING && isRecored && state != LOADING) { //保证在设置padding的过程中,当前的位置一直是在head,否则如果当列表超出屏幕的话,当在上推的时候,列表会同时进行滚动 //可以松手去刷新了 if(state == RELEASE_To_REFRESH) { setSelection(visibleLastIndex); //往上推了,推到了屏幕足够掩盖head的程度,但是还没有推到全部掩盖的地步 if(((startY-tempY) / RATIO < headContentHeight) &&(startY-tempY ) > 0) { state= PULL_To_REFRESH; changeHeaderViewByState(); Log.v(TAG,"由松开刷新状态转变到下拉刷新状态"); } //一下子推到顶了 elseif (startY-tempY <= 0) { state= DONE; changeHeaderViewByState(); Log.v(TAG,"由松开刷新状态转变到done状态"); } //往下拉了,或者还没有上推到屏幕顶部掩盖head的地步 else{ //不用进行特别的操作,只用更新paddingTop的值就行了 } } //还没有到达显示松开刷新的时候,DONE或者是PULL_To_REFRESH状态 if(state == PULL_To_REFRESH) { setSelection(visibleLastIndex); //下拉到可以进入RELEASE_TO_REFRESH的状态 if((startY-tempY ) / RATIO >= headContentHeight) { state= RELEASE_To_REFRESH; isBack= true; changeHeaderViewByState(); Log.v(TAG,"由done或者下拉刷新状态转变到松开刷新"); } //上推到顶了 elseif (startY-tempY <= 0) { state= DONE; changeHeaderViewByState(); isPush= false; Log.v(TAG,"由DOne或者下拉刷新状态转变到done状态"); } } //done状态下 if(state == DONE) { if(startY-tempY > 0) { state= PULL_To_REFRESH; changeHeaderViewByState(); } } //更新headView的size if(state == PULL_To_REFRESH) { headView.setPadding(0,0, 0, -1 * headContentHeight +( startY-tempY ) / RATIO); } //更新headView的paddingTop if(state == RELEASE_To_REFRESH) { headView.setPadding(0,0, 0, (startY-tempY ) / RATIO -headContentHeight); } } break; } } //returntrue ; returnsuper.onTouchEvent(event); }
分析:因为要做成向上滑动效果,所以还要注意以下几点:
1)明白滑动的几个事件关系。
2)更新headView的paddingTop,要改成。更新footView的paddingBottom.自己要根据参数处理。
核心代码下载:http://download.csdn.net/detail/self_discipline1/7493133
0 0
- android ui listview 下拉刷新,上滑动刷新效果
- Android listview滑动删除下拉刷新上拉分页
- Android ListView 下拉刷新 上拉刷新
- ListView下拉刷新效果
- Android UI - ListView下拉刷新的实现
- Android学习笔记:ListView上拉加载下拉刷新升级版:滑动tab结合listView数据刷新
- Android ListView 下拉刷新 上拉更多
- android listview 下拉刷新,上拉更多
- Android ListView 下拉刷新 上拉加载
- Android ListView 下拉刷新 上拉更多
- android listview 上拉加载 下拉刷新
- Android--listview下拉刷新,上拉加载
- android listview上拉加载,下拉刷新
- Android ListView下拉刷新上拉加载
- Android ListView下拉刷新
- android Listview下拉刷新
- Android ListView下拉刷新
- Android-ListView 下拉刷新
- android中像素单位dp、px、pt、sp的比较
- wxPython对话框
- js的常用基础函数
- nginx 配置文件参数说明
- PASCAL 和C语言中串的不同
- android ui listview 下拉刷新,上滑动刷新效果
- ListView重用ViewHolder,错位问题的解决思路?
- 成功必须靠自己去争取。
- 更改SUSE运行级别
- cocos2d-x 2.0 版本的 GLES-Render
- 有关虚拟机
- 优化MyEclipse性能
- J2EE学习笔记之JSP内置对象
- 逻辑地址(段式)-> 线性地址或者虚拟地址(页式) -> 物理地址(页框) 解释 深入浅出