下拉刷新ListView
来源:互联网 发布:ubuntu lightdm 配置 编辑:程序博客网 时间:2024/06/06 14:00
下拉刷新ListView
1、 创建一个类继承一直ListView:classPullToRefreshListViewextends ListView
2、 在构造方法中添加HeadView:addHeaderView(headView);
3、 获取HeadView的高:
自定义View常用的方法:onMeasure onLayout onDraw
1. getMeasuredHeight() 在onMeasure方法执行之后才能获取到
2. getHeight()在onLayout方法执行之后才能获取到值
4、 隐藏headView:headView.setPadding(0,-headViewHeight, 0, 0);
什么时候显示HeadView:当向下滑,且第一条可见item是第0条的时候才需要设置HeadView的paddingTop来显示HeadView代码:
int fingerMoveDistanceY = (int) (ev.getY() -downY);
if (getFirstVisiblePosition() == 0 && fingerMoveDistanceY> 0) {
int paddingTop = fingerMoveDistanceY -headViewHeight;
setHeadViewPaddingTop(paddingTop);
return true; //代表自己已经处理了这个事件,不需要使用ListView的事件了
}
6.下拉刷新三种状态的判断
移动的时候,当paddingTop < 0 的时候,说明HeadView没有完全显示出来,进入下拉刷新状态:
代码
if (paddingTop < 0 && currentState != STATE_PULL_TO_REFRESH) {
currentState = STATE_PULL_TO_REFRESH;
}
*移动的时候,当paddingTop >= 0 的时候,说明HeadView已经完全显示出来了,进入松开以新状态:
代码:
if (paddingTop >= 0 &¤tState !=STATE_RELEASE_TO_REFRESH) {
currentState =STATE_RELEASE_TO_REFRESH;
}
手指抬起的时候,且当前状态是松开刷新状态的时候,进入正在刷新状态:
if (currentState ==STATE_RELEASE_TO_REFRESH) {
currentState = STATE_REFRESHING;
}
当已经是“正在刷新”状态时,则不允许再做”下拉刷新”和”松开刷新”的操作了,在Move事件中加入如下判断:
case MotionEvent.ACTION_MOVE:
if (currentState ==STATE_REFRESHING) {
//如果已经是正在刷新状态了,则不处理下拉的操作了
returnsuper.onTouchEvent(ev);
}
下拉箭头的转动
往下转:-180 ~ -360
创建动画类:
private RotateAnimationcreateAnimator(float fromDegrees,float toDegrees) {
int pivotXType =RotateAnimation.RELATIVE_TO_SELF;//设置旋转点X轴参照物
int pivotYType =RotateAnimation.RELATIVE_TO_SELF;//设置旋转点Y轴参照物
float pivotXValue =0.5f;//设置旋转点X轴的位置为View的中心点
float pivotYValue =0.5f;//设置旋转点Y轴的位置为View的中心点
RotateAnimation ra= new RotateAnimation(fromDegrees, toDegrees, pivotXType,
pivotXValue,pivotYType, pivotYValue);
ra.setDuration(300); // 设置动画执行时间
ra.setFillAfter(true);//设置动画保持在结束状态
return ra;
}8、 隐藏箭头的时候要清除动画:iv_arrow.clearAnimation(); 如果不隐藏动画效果,设置View.GONE之后还是看得见的。
9、 HeadView显示时,当手指松开时的处理:
a)松开时如果是“正在刷新”状态,则把headVie完全显示if (currentState ==STATE_REFRESHING) {
showHeadView();
}
b)松开时如果是“下拉刷新”状态,则把HeadView完全隐藏
if (currentState ==STATE_PULL_TO_REFRESH) {
hideHeadView();
}
10、 增加FooterView:addFooterView(footerView);
11、什么时候显示FooterView呢?当ListView处于空闲状态,并且最后一条可见item是ListView中的最后一条数据则显示:
private OnScrollListenermOnScrollListener =new OnScrollListener() {
publicvoidonScrollStateChanged(AbsListView view,int scrollState) {
if (scrollState == OnScrollListener.SCROLL_STATE_IDLE //是空闲状态
&&getLastVisiblePosition() == getCount() - 1 // 最后可见Item不是最后一条数据
&& !loadingMore) { //没有做联网加载更多的事情
loadingMore=true;
showFooterView();
}
}
};
12、 FooterView显示出来后,ListView不会自动上滑把FooterView显示出来的,所以需要手动设置:setSelection(getCount() - 1);// 选中最后一条
增加回调监听器13、增加回调监听器
publicinterface OnRefreshingLinstener {
/**当ListView处于刷新状态的时候会调用 */
void onRefreshing();
/**当ListView处于加载更多的时候会调用 */
void onLoadMore();
}
选择器问题
如果是给background设置背景,使用drawable类型的选择器
如果是给文字设置颜色,使用color list选择器
SlidingMenu
分析:一个容器(SlidingMenu)中装了两个内容(菜单和主界面),如下:2、 创建一个类继承于ViewGroup:classSlidingMenuextends ViewGroup
3、 布局实现:<com.android.slidingmenu.SidingMenu
android:id="@+id/sidingMenu"
android:layout_width="match_parent"
android:layout_height="match_parent">
<includelayout="@layout/menu"/>
<includelayout="@layout/main"/>
</com.android.slidingmenu.SidingMenu>
ViewGroup拥有下面3个Touch相关方法
dispatchTouchEvent(MotionEvent ev) 用于Touch事件的颁发
onInterceptTouchEvent(MotionEvent ev) 用于拦截Touch事件
onTouchEvent(MotionEvent event) 用于处理Touch事件
Activity、View拥有下面2个Touch相关方法
dispatchTouchEvent(MotionEvent ev) 用于Touch事件的颁发
onTouchEvent(MotionEvent event) 用于处理Touch事件
- ListView下拉回弹刷新
- ListView下拉刷新
- listView下拉刷新2
- ListView 下拉刷新错误
- Android ListView下拉刷新
- listview下拉刷新
- listview实现下拉刷新
- ListView下拉刷新
- android Listview下拉刷新
- ListView下拉回弹刷新
- Android ListView下拉刷新
- 自定义ListView,下拉刷新
- listview 下拉刷新
- ListView下拉刷新
- ListView下拉刷新
- ListView实现下拉刷新
- ListView下拉回弹刷新
- Listview的下拉刷新
- 警告错误整理(1)
- 查询Oracle日志中的SQL
- ExecutorService中submit和execute的区别
- pat 1029
- iOS学习笔记-007.猜图
- 下拉刷新ListView
- 润乾报表打印报错:invalid stream header的几种情况
- WEB_深入浅出 RPC - 深入篇
- Visual Studio 2012 和 SVN 结合实现版本控制 AnkhSvn
- Pow(x, n) / Super Pow
- gentoo on macbook pro driver for the Broadcom Facetime HD webcam
- @Table(name="problem",schema = "root") 的schema属性
- linux新创建用户登陆后-bash
- 【物联网】QCA4010开发环境搭建(二)(解决WIN10下不能驱动问题)