引入android-Ultra-Pull-To-Refresh依赖:
compile 'in.srain.cube:ultra-ptr:1.0.11
* 6个参数可配置: * 阻尼系数:默认1.7f,越大,感觉下拉时越吃力。 * 触发刷新时移动的位置比例:默认,1.2f,移动达到头部高度1.2倍时可触发刷新操作。 * 回弹延时:默认 200ms,回弹到刷新高度所用时间 * 头部回弹时间:默认1000ms * 刷新是保持头部:默认值 true. * 下拉刷新 / 释放刷新,默认为释放刷新
//xml中配置
<in.srain.cube.views.ptr.PtrFrameLayout
android:id="@+id/store_house_ptr_frame"
xmlns:cube_ptr="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
cube_ptr:ptr_resistance="1.7"
cube_ptr:ptr_ratio_of_header_height_to_refresh="1.2"
cube_ptr:ptr_duration_to_close="300"
cube_ptr:ptr_duration_to_close_header="2000"
cube_ptr:ptr_keep_header_when_refresh="true"
cube_ptr:ptr_pull_to_fresh="false" >
<LinearLayout
android:id="@+id/store_house_ptr_image_content"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/cube_mints_333333"
android:clickable="true"
android:padding="10dp">
<in.srain.cube.image.CubeImageView
android:id="@+id/store_house_ptr_image"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
</in.srain.cube.views.ptr.PtrFrameLayout>
//代码中配置
mPtrFrame.setResistance(1.7f);
mPtrFrame.setRatioOfHeaderHeightToRefresh(1.2f);
mPtrFrame.setDurationToClose(200);
mPtrFrame.setDurationToCloseHeader(1000);
// default is false
mPtrFrame.setPullToRefresh(false);
// default is true
mPtrFrame.setKeepHeaderWhenRefresh(true);
代码示例:
public void initViews() {
ptr = (PtrFrameLayout) view.findViewById(R.id.store_house_ptr_frame);
// 刷新时,保持内容不动,仅头部下移
// ptr.setPinContent(true);
// PtrFrameLayout代码配置属性方式
// // the following are default settings
// mPtrFrame.setResistance(1.7f);
// mPtrFrame.setRatioOfHeaderHeightToRefresh(1.2f);
// mPtrFrame.setDurationToClose(200);
// mPtrFrame.setDurationToCloseHeader(1000);
// // default is false
// mPtrFrame.setPullToRefresh(false);
// // default is true
// mPtrFrame.setKeepHeaderWhenRefresh(true);
/**
* 下拉刷新头部-文字进度效果
*/
/*
final StoreHouseHeader header1 = new StoreHouseHeader(view.getContext());
// //设置布局参数,-1指匹配父窗体,-2指包裹内容
header1.setLayoutParams(new PtrFrameLayout.LayoutParams(-1, -2));
// //设置内边距...PtrLocalDisplay框架自带
// header1.setPadding(0, PtrLocalDisplay.dp2px(15), 0, 0);
// 头部使用的字符串,这里的字符串只能是 [A-Z 0-9 - .]
//header1.initWithString("Loading");
header1.initWithStringArray(R.array.storehouse);
//header.initWithStringArray(R.array.storehouse);
header1.setTextColor(Color.GREEN);
header1.setBackgroundColor(Color.GRAY);
ptr.setLastUpdateTimeRelateObject(this);
//给下拉刷新设置下拉头部 StoreHouseHeader布局
ptr.setHeaderView(header1);
// //添加一个UI时间处理回调函数。为MaterialHeader的内部实现回调。
ptr.addPtrUIHandler(header1);
*/
/**
* 不设置头部,使用默认效果
*/
PtrClassicDefaultHeader2 defaultHeader = new PtrClassicDefaultHeader2(getContext());
defaultHeader.setLastUpdateTimeRelateObject(this);
// 给Ptr添加头布局
ptr.setHeaderView(defaultHeader);
// 使头布局的状态和刷新状态同步
ptr.addPtrUIHandler(defaultHeader);
//添加一个UI时间处理回调函数。为MaterialHeader的内部实现回调。
ptr.addPtrUIHandler(defaultHeader);
/**
* 下拉刷新-转圈效果
*/
// 创建一个MaterialHeader 的视图(该框架自带)
/* final MaterialHeader header = new MaterialHeader(this);
//可以设置一组 颜色数组,改变进度显示的颜色变化
header.setColorSchemeColors(new int[]{Color.RED, Color.BLUE, Color.GRAY, Color.GREEN});
//设置布局参数,-1指匹配父窗体,-2指包裹内容
header.setLayoutParams(new PtrFrameLayout.LayoutParams(-1, -2));
//设置内边距...PtrLocalDisplay框架自带
header.setPadding(0, PtrLocalDisplay.dp2px(15), 0, PtrLocalDisplay.dp2px(10));
//告诉创建一个MaterialHeader 布局绑定在那个下拉刷新控件上
header.setPtrFrameLayout(frameLayout1);
//给下拉刷新设置下拉头部 MaterialHeader布局
frameLayout1.setHeaderView(header);
//添加一个UI时间处理回调函数。为MaterialHeader的内部实现回调。
frameLayout1.addPtrUIHandler(header);*/
/**
* 下拉刷新-文字进度效果
*/
/*
final StoreHouseHeader header1 = new StoreHouseHeader(view.getContext());
// //设置布局参数,-1指匹配父窗体,-2指包裹内容
header1.setLayoutParams(new PtrFrameLayout.LayoutParams(-1, -2));
// //设置内边距...PtrLocalDisplay框架自带
header1.setPadding(0, PtrLocalDisplay.dp2px(15), 0, 0);
// 头部使用的字符串。这里的字符串只能是 [A-Z 0-9 - .]
header1.initWithString("1000cf");
header1.setTextColor(Color.GREEN);
header1.setBackgroundColor(Color.GRAY);
//给下拉刷新设置下拉头部 StoreHouseHeader布局
ptr.setHeaderView(header1);
// //添加一个UI时间处理回调函数。为MaterialHeader的内部实现回调。
ptr.addPtrUIHandler(header1);
*/
}
public void initEvents() {
/**
* 下拉刷新的事件监听回调方法
* ServerSocket
*/
/*
ptr.setPtrHandler(new PtrDefaultHandler() {
@Override
public void onRefreshBegin(PtrFrameLayout frame) {
new AsyncTask<String[],Void,Bitmap>(){
@Override
protected Bitmap doInBackground(String[]... params) {
Bitmap bitmap = null;
try {
URL url = new URL(urlStr);
URLConnection urlConnection = url.openConnection();
InputStream inputStream = urlConnection.getInputStream();
bitmap = BitmapFactory.decodeStream(inputStream);
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return bitmap;
}
@Override
protected void onPostExecute(Bitmap bitmap) {
imageView1.setImageBitmap(bitmap);
ptr.refreshComplete();
}
}.execute();
}
});*/
ptr.disableWhenHorizontalMove(false);
ptr.setPtrHandler(new PtrHandler() {
@Override
public void onRefreshBegin(PtrFrameLayout frame) {
frame.postDelayed(new Runnable() {
@Override
public void run() {
ptr.refreshComplete();
}
}, 1800);
}
@Override
public boolean checkCanDoRefresh(PtrFrameLayout frame, View content, View header) {
// 默认实现,根据实际情况做改动
return PtrDefaultHandler.checkContentCanBePulledDown(frame, content, header);
}
});
}
将两个方法应用就可以实现刷新。