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接口即可:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124package
cn.zmit.ow.widget;
import
in.srain.cube.views.ptr.PtrFrameLayout;
import
in.srain.cube.views.ptr.PtrUIHandler;
import
android.annotation.SuppressLint;
import
android.content.Context;
import
android.util.AttributeSet;
import
android.view.LayoutInflater;
import
android.view.View;
import
android.widget.FrameLayout;
import
cn.zmit.ow.R;
import
cn.zmit.ow.widget.waveview.WaveView;
/**
* 自定义下拉刷新头部
*
* @author Robin time 2015-02-11 14:06:33
*
*/
public
class
CustomPtrHeader
extends
FrameLayout
implements
PtrUIHandler {
WaveView wave_view;
int
i;
public
CustomPtrHeader(Context context) {
super
(context);
init();
}
public
CustomPtrHeader(Context context, AttributeSet attrs) {
super
(context, attrs);
init();
}
public
CustomPtrHeader(Context context, AttributeSet attrs,
int
defStyleAttr) {
super
(context, attrs, defStyleAttr);
init();
}
@SuppressLint
(
"NewApi"
)
public
CustomPtrHeader(Context context, AttributeSet attrs,
int
defStyleAttr,
int
defStyleRes) {
super
(context, attrs, defStyleAttr, defStyleRes);
init();
}
/**
* 初始化
*/
private
void
init() {
View view = LayoutInflater.from(getContext()).inflate(
R.layout.custom_ptr_header,
this
);
wave_view = (WaveView) view.findViewById(R.id.wave_view);
}
@Override
public
void
onUIReset(PtrFrameLayout frame) {
}
@Override
public
void
onUIRefreshPrepare(PtrFrameLayout frame) {
}
@Override
public
void
onUIRefreshBegin(PtrFrameLayout frame) {
/* if (wave_view.getProgress()==0) {
for (i = 0; i < 100; i++) {
new Thread(){
public void run() {
UIKit.runOnMainThreadAsync(new Runnable() {
@Override
public 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();
}
}*/
}
@Override
public
void
onUIRefreshComplete(PtrFrameLayout frame) {
}
@Override
public
void
onUIPositionChange(PtrFrameLayout frame,
boolean
isUnderTouch,
byte
status,
int
oldPosition,
int
currentPosition,
float
oldPercent,
float
currentPercent) {
float
percent = Math.min(1f, currentPercent);
// if (status == PtrFrameLayout.PTR_STATUS_PREPARE) {
wave_view.setProgress((
int
) (percent *
100
*
1.0
));
invalidate();
// }
}
/**
* 设置波纹进度
* @param progress 进度
*/
public
void
setWaveProgress(
int
progress){
wave_view.setProgress(progress);
}
}
头部定义好之后,就可以调用下拉刷新的代码
123456789101112131415161718192021222324252627282930313233343536/* 创建自定义刷新头部view */
header =
new
CustomPtrHeader(
this
);
/* 设置刷新头部view */
ptr_view.setHeaderView(header);
/* 设置回调 */
ptr_view.addPtrUIHandler(header);
/* 设置下拉刷新监听 */
ptr_view.setPtrHandler(
new
PtrHandler() {
@Override
public
void
onRefreshBegin(PtrFrameLayout frame) {
refresh();
}
@Override
public
boolean
checkCanDoRefresh(PtrFrameLayout frame,
View content, View header) {
if
(!StringUtils.isEmpty(mCurrentUrl)) {
: mWebView.getScrollY() ==
0
;
}
else
{
return
mWebView.getScrollY() ==
0
;
}
}
});
/* 延时100秒 */
ptr_view.postDelayed(
new
Runnable() {
@Override
public
void
run() {
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. 正如 ...
随机推荐
- Netsharp产品标识自定义设置:产品名称、版权、LOGO等
阅读本文请先阅读Netsharp下载及环境搭建 Netsharp本身是一个业务基础平台,Netsharp本身基础上开发的业务产品对客户才有价值,客户看到的产品应该不是Netsharp而是具体的业务产品 ...
- Leetcode#68 Text Justification
原题地址 没有复杂的算法,纯粹的模拟题 先试探,计算出一行能放几个单词 然后计算出单词之间有几个空格,注意,如果空格总长度无法整除空格数,前面的空格长度通通+1 最后放单词.放空格,组成一行,加入结果 ...
- xcodebuild和xcrun实现自动打包iOS应用程序
随着苹果手持设备用户的不断增加,ios应用也增长迅速,同时随着iphone被越狱越来越多的app 的渠道也不断增多,为各个渠道打包成了一件费时费力的工作,本文提供一种比较智能的打包方式来减少其带来的各 ...
- [工作记录] Android OpenGL ES 2.0: square texture not supported on some device
npot texture: non-power-of-two texture.rectangle texture: non-square (height != wdith) 在测试Samsumg Ga ...
- 引擎设计跟踪(九.8) Gizmo helper实现与多国语言
最近把gizmo helper的绘制做好了. 1.为了复用代码,写了utility来创建sphere, cube, cylinder, plane, ring(line), circle(solid) ...
- Spring中自动装配(转)
Spring中有四种自动装配类型,分别为:byName,byType,constructor,autodetect,下面来分别介绍一下这些是如何自动装配的 <bean id="foo& ...
- 拆分Sql列中内容的拆分
拆分Sql列中内容的拆分. /*按照符号分割字符串*/ create function [dbo].[m_split](@c varchar(2000),@split varchar(2)) retu ...
- centos mysql 操作
安装mysqlyum -y install mysql-server 修改mysql配置 vi /etc/my.cnf 这里会有很多需要注意的配置项,后面会有专门的笔记 暂时修改一下编码(添加在密码下 ...
- Stacked injection--堆叠注入--堆查询注入
Stacked injection--堆叠注入--堆查询注入 原文地址;http://www.sqlinjection.net/stacked-queries/ 本篇属于集合原作者的思路和个人想法 ...
- 通过登入IP记录Linux所有用户登录所操作的日志
通过登入IP记录Linux所有用户登录所操作的日志 对于Linux用户操作记录一般通过命令history来查看历史记录,但是如果在由于误操作而删除了重要的数据的情况下,history命令就不会有什么作 ...