概要
下拉刷新,几乎是每个 Android 应用都会需要的功能。 android-Ultra-Pull-To-Refresh (以下简称 UltraPTR )便是一个强大的 Andriod 下拉刷新框架 。
主要功能及优点
1.继承于 ViewGroup, Content 可以包含任何 View。
2.简洁完善的 Header 抽象,方便进行拓展,构建符合需求的头部。
模块集成主要步骤
以普通效果下拉刷新出现scrollview为例:
将附件中的core与ptr-lib项目导入eclipse,然后右键项目点击Properties,将is library勾上(两个项目都要设置)
右键自己的项目,点击Properties,点击add选取上面添加的两个引用
在AndroidManifest.xml中添加权限
复制代码
xml文件代码为:
复制代码
xml代码中使用自定义控件来定义刷新的content内容,并且已经设定好了刷新有关的属性设置。属性设置也可以在java代码中设置.
复制代码
java代码
复制代码
使用pushFragmentToBackStack()函数来调用
复制代码
因为用到了PtrClassicFrameLayout默认的下拉刷新头部,所以不需要定义头部。但如果要其他的头部刷新效果例如storehouse效果,则需把上面代码13行的PtrClassicFrameLayout改为PtrFrameLayout,然后进行设置:
复制代码
注意事项
1.需要sdk版本>=19
环境相关
开发平台:android
语言: java
开发工具: eclipse
下拉刷新,几乎是每个 Android 应用都会需要的功能。 android-Ultra-Pull-To-Refresh (以下简称 UltraPTR )便是一个强大的 Andriod 下拉刷新框架 。
主要功能及优点
1.继承于 ViewGroup, Content 可以包含任何 View。
2.简洁完善的 Header 抽象,方便进行拓展,构建符合需求的头部。
模块集成主要步骤
以普通效果下拉刷新出现scrollview为例:
将附件中的core与ptr-lib项目导入eclipse,然后右键项目点击Properties,将is library勾上(两个项目都要设置)
右键自己的项目,点击Properties,点击add选取上面添加的两个引用
在AndroidManifest.xml中添加权限
复制代码
1
2
3
4
|
<uses-permission android:name=
"android.permission.INTERNET"
/>
<uses-permission android:name=
"android.permission.GET_TASKS"
/>
<uses-permission android:name=
"android.permission.WRITE_EXTERNAL_STORAGE"
/>
<uses-permission android:name=
"android.permission.ACCESS_NETWORK_STATE"
/>
|
xml文件代码为:
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
|
<?xml version=
"1.0"
encoding=
"utf-8"
?>
<RelativeLayout xmlns:android=
"http://schemas.android.com/apk/res/android"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
>
<in.srain.cube.views.ptr.PtrClassicFrameLayout
android:id=
"@+id/rotate_header_web_view_frame"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:background=
"@color/cube_mints_f1f1f1"
app:ptr_duration_to_close=
"200"
app:ptr_duration_to_close_header=
"1000"
app:ptr_keep_header_when_refresh=
"true"
app:ptr_pull_to_fresh=
"false"
app:ptr_ratio_of_header_height_to_refresh=
"1.2"
app:ptr_resistance=
"1.7"
>
<ScrollView
android:id=
"@+id/rotate_header_scroll_view"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
>
<LinearLayout
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:orientation=
"vertical"
>
<TextView
android:layout_width=
"match_parent"
android:layout_height=
"200dp"
android:layout_margin=
"@dimen/cube_mints_content_view_padding"
android:background=
"@drawable/text_view_bg"
android:clickable=
"true"
android:gravity=
"center"
android:text=
"text 1"
android:textColor=
"@color/cube_mints_white"
android:textSize=
"30sp"
/>
<TextView
android:layout_width=
"match_parent"
android:layout_height=
"400dp"
android:layout_margin=
"@dimen/cube_mints_content_view_padding"
android:background=
"@drawable/text_view_bg"
android:clickable=
"true"
android:gravity=
"center"
android:text=
"text 2"
android:textColor=
"@color/cube_mints_white"
android:textSize=
"30sp"
/>
<TextView
android:layout_width=
"match_parent"
android:layout_height=
"300dp"
android:layout_margin=
"@dimen/cube_mints_content_view_padding"
android:background=
"@drawable/text_view_bg"
android:clickable=
"true"
android:gravity=
"center"
android:text=
"text 3"
android:textColor=
"@color/cube_mints_white"
android:textSize=
"30sp"
/>
</LinearLayout>
</ScrollView>
</in.srain.cube.views.ptr.PtrClassicFrameLayout>
</RelativeLayout>
|
复制代码
1
2
3
4
5
6
7
8
9
|
// the following are default settings
mPtrFrame.setResistance(
1
.7f);
//阻尼系数默认: 1.7f,越大,感觉下拉时越吃力。
mPtrFrame.setRatioOfHeaderHeightToRefresh(
1
.2f);
//触发刷新时移动的位置比例:默认,1.2f,移动达到头部高度1.2倍时可触发刷新操作。
mPtrFrame.setDurationToClose(
200
);
//回弹延时:默认 200ms,回弹到刷新高度所用时间
mPtrFrame.setDurationToCloseHeader(
1000
);
//头部回弹时间:默认1000ms
// default is false
mPtrFrame.setPullToRefresh(
false
);
//下拉刷新 or 释放刷新:默认值释放刷新
// default is true
mPtrFrame.setKeepHeaderWhenRefresh(
true
);
//刷新是否保持头部:默认值true
|
java代码
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
public
class
WithScrollView
extends
TitleBaseFragment {
private
PtrClassicFrameLayout mPtrFrame;
private
ScrollView mScrollView;
@Override
public
View createView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
setHeaderTitle(R.string.ptr_demo_block_scroll_view);
final
View contentView = inflater.inflate(R.layout.fragment_classic_header_with_scroll_view,
null
);
//下拉内容绑定
mScrollView = (ScrollView) contentView.findViewById(R.id.rotate_header_scroll_view);
//注册scrollview
mPtrFrame = (PtrClassicFrameLayout) contentView.findViewById(R.id.rotate_header_web_view_frame);
mPtrFrame.setLastUpdateTimeRelateObject(
this
);
mPtrFrame.setPtrHandler(
new
PtrHandler() {
@Override
public
boolean
checkCanDoRefresh(PtrFrameLayout frame, View content, View header) {
//判断是否能下拉刷新
return
PtrDefaultHandler.checkContentCanBePulledDown(frame, mScrollView, header);
}
@Override
public
void
onRefreshBegin(PtrFrameLayout frame) {
//刷新开始后100ms执行
mPtrFrame.postDelayed(
new
Runnable() {
@Override
public
void
run() {
mPtrFrame.refreshComplete();
//刷新完成
}
},
100
);
}
});
mPtrFrame.postDelayed(
new
Runnable() {
@Override
public
void
run() {
mPtrFrame.autoRefresh();
//进入后自动刷新
}
},
100
);
return
contentView;
}
}
|
复制代码
1
|
getContext().pushFragmentToBackStack(WithScrollView.
class
,
null
);
//如果在Activity的子类中就不需要getContext.
|
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
|
// header
final
StoreHouseHeader header =
new
StoreHouseHeader(getContext());
header.setPadding(
0
, LocalDisplay.dp2px(
15
),
0
,
0
);
/**
* using a string, support: A-Z 0-9 - .
* you can add more letters by {@link in.srain.cube.views.ptr.header.StoreHousePath#addChar}
*/
header.initWithString(mStringList[
0
]);
setHeaderTitle(mTitlePre + mStringList[
0
]);
frame.setDurationToCloseHeader(
3000
);
frame.setHeaderView(header);
frame.addPtrUIHandler(header);
|
注意事项
1.需要sdk版本>=19
环境相关
开发平台:android
语言: java
开发工具: eclipse