Android 定制下拉刷新头部 Ultra Pull To Refresh
我们看到手机中的各种APP的花样繁多的下拉刷新是不是有点心动呢,想着自己定制自己的专门的下拉刷新,市场上比如,58同城,京东,天猫,美团等下拉刷新都是在下拉头部执行帧动画,我最近看到一个APP,就是慕课网的Android客户端,平时有时候看这个网站的学习视频,就下了一个,发现它的头部是一个圆形的水波纹效果:
看起来很Cool,正好公司有需求做官网的APP,正好可以用上公司的Logo做一个水波纹的下拉刷新,首先要实现水波纹的效果,通过解压慕课网的客户端,发现它的实现其实也是用帧动画,就是假的水波纹,但是我们不想这么早,要做一个完整的水波纹下拉刷新,那么就要实现水波纹的效果,在github上很多水波纹的实现,实现原理是用正弦与余弦曲线,这里放一个链接,有兴趣的可以看看https://github.com/john990/WaveView
然后用美工切的图往上一盖,基本雏形就出来了
ok,下面就是往下拉刷新上集成了。这里介绍一个比较牛逼的下拉刷新框架android-Ultra-Pull-to-Refresh,这个框架可以方便的定制下拉刷新的头部,接口强大,值得研究,下面我们就进行移植实现:
首先使用这个框架定制头部,需要我们把头部的View先实现出来,只要实现PtrUIHandler接口即可:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124packagecn.zmit.ow.widget;importin.srain.cube.views.ptr.PtrFrameLayout;importin.srain.cube.views.ptr.PtrUIHandler;importandroid.annotation.SuppressLint;importandroid.content.Context;importandroid.util.AttributeSet;importandroid.view.LayoutInflater;importandroid.view.View;importandroid.widget.FrameLayout;importcn.zmit.ow.R;importcn.zmit.ow.widget.waveview.WaveView;/*** 自定义下拉刷新头部** @author Robin time 2015-02-11 14:06:33**/publicclassCustomPtrHeaderextendsFrameLayoutimplementsPtrUIHandler {WaveView wave_view;inti;publicCustomPtrHeader(Context context) {super(context);init();}publicCustomPtrHeader(Context context, AttributeSet attrs) {super(context, attrs);init();}publicCustomPtrHeader(Context context, AttributeSet attrs,intdefStyleAttr) {super(context, attrs, defStyleAttr);init();}@SuppressLint("NewApi")publicCustomPtrHeader(Context context, AttributeSet attrs,intdefStyleAttr,intdefStyleRes) {super(context, attrs, defStyleAttr, defStyleRes);init();}/*** 初始化*/privatevoidinit() {View view = LayoutInflater.from(getContext()).inflate(R.layout.custom_ptr_header,this);wave_view = (WaveView) view.findViewById(R.id.wave_view);}@OverridepublicvoidonUIReset(PtrFrameLayout frame) {}@OverridepublicvoidonUIRefreshPrepare(PtrFrameLayout frame) {}@OverridepublicvoidonUIRefreshBegin(PtrFrameLayout frame) {/* if (wave_view.getProgress()==0) {for (i = 0; i < 100; i++) {new Thread(){public void run() {UIKit.runOnMainThreadAsync(new Runnable() {@Overridepublic void run() {wave_view.setProgress(i);if (wave_view.getProgress()==100) {wave_view.setProgress(0);}}});try {Thread.sleep(200);} catch (InterruptedException e) {e.printStackTrace();}};}.start();}}*/}@OverridepublicvoidonUIRefreshComplete(PtrFrameLayout frame) {}@OverridepublicvoidonUIPositionChange(PtrFrameLayout frame,booleanisUnderTouch,bytestatus,intoldPosition,intcurrentPosition,floatoldPercent,floatcurrentPercent) {floatpercent = Math.min(1f, currentPercent);// if (status == PtrFrameLayout.PTR_STATUS_PREPARE) {wave_view.setProgress((int) (percent *100*1.0));invalidate();// }}/*** 设置波纹进度* @param progress 进度*/publicvoidsetWaveProgress(intprogress){wave_view.setProgress(progress);}}头部定义好之后,就可以调用下拉刷新的代码
123456789101112131415161718192021222324252627282930313233343536/* 创建自定义刷新头部view */header =newCustomPtrHeader(this);/* 设置刷新头部view */ptr_view.setHeaderView(header);/* 设置回调 */ptr_view.addPtrUIHandler(header);/* 设置下拉刷新监听 */ptr_view.setPtrHandler(newPtrHandler() {@OverridepublicvoidonRefreshBegin(PtrFrameLayout frame) {refresh();}@OverridepublicbooleancheckCanDoRefresh(PtrFrameLayout frame,View content, View header) {if(!StringUtils.isEmpty(mCurrentUrl)) {: mWebView.getScrollY() ==0;}else{returnmWebView.getScrollY() ==0;}}});/* 延时100秒 */ptr_view.postDelayed(newRunnable() {@Overridepublicvoidrun() {ptr_view.autoRefresh();}},100);/* 下拉时阻止事件分发 */ptr_view.setInterceptEventWhileWorking(true);这样就完成了,看下最终实现效果

本文永久地址:http://blog.it985.com/7787.html
本文出自 IT985博客 ,转载时请注明出处及相应链接。
Android 定制下拉刷新头部 Ultra Pull To Refresh的更多相关文章
- Android 实现下拉刷新和上拉加载更多的RECYCLERVIEW和SCROLLVIEW
PullRefreshRecyclerView.java /** * 类说明:下拉刷新上拉加载更多的RecyclerView * Author: gaobaiq * Date: 2016/5/9 18 ...
- Xamarin. Android实现下拉刷新功能
PS:发现文章被其他网站或者博客抓取后发表为原创了,给图片加了个水印 下拉刷新功能在安卓和iOS中非常常见,一般实现这样的功能都是直接使用第三方的库,网上能找到很多这样的开源库.然而在Xamarin. ...
- Android智能下拉刷新加载框架—看这些就够了
一些值得学习的几个下拉刷新上拉加载开源库 Android智能下拉刷新框架-SmartRefreshLayout 支持所有的 View(AbsListView.RecyclerView.WebView. ...
- android Android-PullToRefresh 下拉刷新
1.github下载地址 原作者: https://github.com/chrisbanes/Android-PullToRefresh 我自己的: https://github.com/zyj ...
- Android自定义下拉刷新
网上的下拉刷新功能很多,不过基本上都是隐藏header的,而项目里面需要只隐藏部分的header,类似QQ好友动态的效果,修改了一些现有的,最后有很多问题,所以就自己自定义了一个,逻辑也很简单,首先就 ...
- Android 自定义下拉刷新ListView
package com.dwtedx.qq.view; import android.content.Context; import android.util.AttributeSet; import ...
- 【Android】下拉刷新实现
关于这方面的文章百度下有很多,我就只写写我自己实现过程. 我觉得学习一门语言不是做了几个项目就可以认为自己会了,这只是暂时的,若没有笔记,时间长了,你是怎么解决某些问题,估计连你自己都忘了,又得费时费 ...
- Android PullToRefresh 下拉刷新,上拉很多其它,支持ScrollView,ListView,可方便拓展GridView,WebView等
在写着东西之前.从网上找到非常多这方面的源代码,可是基本没有找到惬意的.包含在GitHub上的比較有名的Android-PullToRefresh-master.思来想去还是自己写吧.当然当中借鉴了一 ...
- 032 Android智能下拉刷新框架-SmartRefreshLayout+RecyclerView的使用
1.SmartRefreshLayout介绍 SmartRefreshLayout的目标是打造一个强大,稳定,成熟的下拉刷新框架,并集成各种的炫酷.多样.实用.美观的Header和Footer. 正如 ...
随机推荐
- python 数据结构-字典
原文地址:http://docs.pythontab.com/python/python3.4/datastructures.html#tut-tuples 理解字典的最佳方式是把它看做无序的键: 值 ...
- .NET设计模式(17):命令模式(Command Pattern)(转)
概述 在软件系统中,“行为请求者”与“行为实现者”通常呈现一种“紧耦合”.但在某些场合,比如要对行为进行“记录.撤销/重做.事务”等处理,这种无法抵御变化的紧耦合是不合适的.在这种情况下,如何将“行为 ...
- Codeforces Round #231 (Div2) 迟到的解题报告
题目A: 给一个火柴等式,可以从左边移动一根到右边,也可以从右边移到左边,但是不能移动“+”,”=“的火柴, 而且加法里面的数都要大于0(很重要的条件),基本上注意到这点的都过了,没注意的都被HACK ...
- Sqli-labs less 40
Less-40 本关的sql语句为SELECT * FROM users WHERE id=('$id') LIMIT 0,1 我们根据sql语句构造以下的payload: http://127.0. ...
- Linux下ettercap的安装,make安装软件步骤
第一步:下载ettercap的压缩包 用tar 解压压缩包,-z 用gzip的方式解压 -x 解打包/解压缩 -f 指定包 -v显示进度 ls 可以查看解压后出现一个新目录 ettercap-0.8 ...
- D3D11 Debug Layer的bug
在开发D3D应用程序时,我们会使用Debug Layer来调试应用程序,以确保我们的程序在最终发布时没有warnings和errors.不过最近在开发应用程序时遇到了这样的问题,就是我把多个网格模型的 ...
- CSS 加载新方式
Chrome 浏览器有意改变<link rel="stylesheet">的加载方式,当其出现在<body>中时,这一变化将更加明显.笔者决定在本文中进行详 ...
- 制作类似DataGrid自定义控件
首先看一下.net自带的DataGrid,想想如何应该怎样才能实现那样的展现形式. 1)需要以网格形式显示内容. 2)网格的宽度.高度可以定义. 3)可以显示滚动条. 4)单击可以选中某个单元格. 当 ...
- Android Handler的使用
大家好我们这一节讲的是Android Handler的使用,在讲Handler之前,我们先提个小问题,就是如何让程序5秒钟更新一下Title. 首先我们看一下习惯了Java编程的人,在不知道Handl ...
- [你必须知道的.NET]第三十二回,,深入.NET 4.0之,Tuple一二
发布日期:2009.06.01 作者:Anytao © 2009 Anytao.com ,Anytao原创作品,转贴请注明作者和出处. Tuple,是函数式编程的概念之一,早见于Elang.F#等动态 ...