Android下拉刷新PullToRefresh源码解读
来源:互联网 发布:为什么淘宝头像换不了 编辑:程序博客网 时间:2024/05/21 11:29
我是Android新手,我就先打算阅读优秀的开源项目来提高自己的水平,下面我将要把我自己解读的Android下拉刷新实现的基本步骤做一下我自己的解读
学习资料来源:http://blog.csdn.net/leehong2005/article/details/12567757
首先来看我的项目组成:
1.基本布局原理
示意图:
我的基本布局原理部分就是实现该界面,效果如下:
点击按钮后,会将头部的底部隐藏掉,当然不是简单的设置visibility为Gone,而是修改布局的尺寸来做到的,实现过程就是在自定义的LinearLayout中添加这三个部分
private void init(Context context, AttributeSet attrs) { mContext = context; setOrientation(LinearLayout.VERTICAL);// 1.初始化并添加三个组件 testContent = new TestContent(context); testHeader = new TestHeader(context); testFooter = new TestFooter(context); addView(testHeader); addView(testContent); addView(testFooter);// 2、隐藏头部和尾部,这里为了掩饰方便,将隐藏步骤放在了Button的点击事件中,真正的框架中是初始化时就隐藏的 mBtnHideHeadAndFoot = (Button) testContent.findViewById(R.id.btn_hide_head_and_foot); mBtnHideHeadAndFoot.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (isHeadAndFootHide) { showHeadAndFoot(); } else { hideHeadAndFoot(); } isHeadAndFootHide = !isHeadAndFootHide; } }); }
2、简易的上拉下拉
我在第一部的基本布局的基础上实现下拉上拉来拖拽出头部和尾部,效果如下:
实现的步骤就是在1的基础上添加触摸事件的处理:
@Override public boolean onInterceptTouchEvent(MotionEvent ev) {// 因为我在这个案例中没有加ListView等一系列的控件,所以这里直接返回true表示拦截// 在真正的下拉刷新中,只有在中间的ListView等控件滑动到顶部或者地步的时候才拦截触摸事件 return true; } /** * 上一次移动的点 */ private float mLastMotionY = -1; @Override public boolean onTouchEvent(MotionEvent event) { boolean result = true; switch (event.getAction()) { case MotionEvent.ACTION_DOWN: mLastMotionY = event.getY(); break; case MotionEvent.ACTION_MOVE: final float deltaY = event.getY() - mLastMotionY; mLastMotionY = event.getY(); if (deltaY > 0) {// 向下滑动,拖拽出头部 pullHeaderLayout(deltaY); result = true; } else {// 向上滑动,拖拽出尾部 pullFooterLayout(deltaY); result = true; } break; case MotionEvent.ACTION_UP: resetHeaderLayout(); break; default: break; } return result; }
3、在第二步的基础上再中间加入ListView,现在,一个上拉刷新的ListView就初具雏形了,效果如下:
实现原理就是在第二步的基础上对ListView的滑动位置坐一下判断,只有滑动到顶部或者底部的时候才拦截触摸事件:
/** * 上一次移动的点 */ private float mLastMotionY = -1; @Override public boolean onInterceptTouchEvent(MotionEvent ev) {// 在实现简易的上拉下拉中,我们直接拦截了触摸事件,但是在这里不行// 我们必须在ListView滑动到顶部或者底部的时候才能拦截事件 boolean result = false; switch (ev.getAction()) { case MotionEvent.ACTION_DOWN: mLastMotionY = ev.getY(); break; case MotionEvent.ACTION_MOVE: final float deltaY = ev.getY() - mLastMotionY; if (deltaY > 0) {// 向下滑动 if (isFirstItemVisible()) { result = true; } else { result = false; } } else if (deltaY < 0) {// 向上滑动 if (isLastItemVisible()) { result = true; } else { result = false; } } else { result = false; } break; case MotionEvent.ACTION_UP: break; default: break; } return result; }那么到这里,我想关于下拉刷新已经知道怎么实现了,在完成的源码中只不过是加了刷新的监听器和各种标志位来控制刷新的过程
源码:http://download.csdn.net/detail/y280903468/9660932
0 0
- Android下拉刷新PullToRefresh源码解读
- 开源Android-PullToRefresh下拉刷新源码分析
- 开源Android-PullToRefresh下拉刷新源码分析
- 开源Android-PullToRefresh下拉刷新源码分析
- android pulltorefresh 下拉刷新
- PullToRefresh(下拉刷新)源码浅析
- PullToRefresh(下拉刷新)源码浅析
- android Android-PullToRefresh 下拉刷新
- android Android-PullToRefresh 下拉刷新
- 5.3.2 开源Android-PullToRefresh下拉刷新源码分析
- android控件 下拉刷新pulltorefresh
- android 之 下拉刷新PullToRefresh
- 基于pulltorefresh源码修改下拉刷新动画
- Android下拉刷新组件Android PullToRefresh使用方法
- android 控件 下拉刷新 Android-PullToRefresh
- android 控件 下拉刷新 android-pulltorefresh
- android ActionBar-PullToRefresh 下拉刷新的使用方法
- Android-PullToRefresh:下拉刷新和加载更多
- Java基础:动态代理
- JVM学习笔记之类加载器
- mysql sql技巧: 子查询改为连接查询&&涉及多个表的删除和更新
- jquery使用经验
- Windows系统下创建自签名ssl证书
- Android下拉刷新PullToRefresh源码解读
- 【Linux】时间编程
- PHP文件上传类(支持单文件上传,也支持多文件上传)
- 树莓派连接WiFi(最稳定的方法
- 学习心得——万国码
- 欢迎使用CSDN-markdown编辑器
- expression "eps"
- 第八周训练2鸡兔共笼
- python学习笔记(2)网络编程