最近在学习android-Ultra-Pull-To-Refresh框架的使用,发现网上资源是真不少,但是做为初学的我来说,看起来有点蒙圈。在此,我就以初学者的视角来说说这个框架的使用。
先上代码 布局中:
<in.srain.cube.views.ptr.PtrFrameLayout xmlns:cube_ptr="http://schemas.android.com/apk/res-auto"
android:id="@+id/ptr"
android:layout_width="match_parent"
android:layout_height="match_parent"
cube_ptr:ptr_duration_to_close="200"
cube_ptr:ptr_duration_to_close_header="1000"
cube_ptr:ptr_keep_header_when_refresh="true"
cube_ptr:ptr_pull_to_fresh="false"
cube_ptr:ptr_ratio_of_header_height_to_refresh="1.2"
cube_ptr:ptr_resistance="1.7">
<!--这里可以是任意view-->
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clickable="true"
android:gravity="center"
android:text="I am a TextView"
android:textSize="30sp" />
</in.srain.cube.views.ptr.PtrFrameLayout>
java中的代码:
public class MainActivity extends AppCompatActivity {
private PtrFrameLayout mPtrFrame;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mPtrFrame = (PtrFrameLayout) findViewById(R.id.ptr);
/**
* 在 xml 中配置过了,就不要在这里配置了。
*/
/*mPtrFrame.setResistance(1.7f); //阻尼系数 默认: 1.7f,越大,感觉下拉时越吃力。
mPtrFrame.setRatioOfHeaderHeightToRefresh(1.2f); //触发刷新时移动的位置比例 默认,1.2f,移动达到头部高度1.2倍时可触发刷新操作。
mPtrFrame.setDurationToClose(200);//回弹延时 默认 200ms,回弹到刷新高度所用时间
mPtrFrame.setDurationToCloseHeader(1000);//头部回弹时间 默认1000ms
mPtrFrame.setPullToRefresh(false);// 刷新是保持头部 默认值 true.
mPtrFrame.setKeepHeaderWhenRefresh(true);//下拉刷新 / 释放刷新 默认为释放刷新*/
/**
* 经典 风格的头部实现
*/
final PtrClassicDefaultHeader header = new PtrClassicDefaultHeader(this);
header.setPadding(0, PtrLocalDisplay.dp2px(15), 0, 0);
/**
* StoreHouse风格的头部实现
*/
/*final StoreHouseHeader header = new StoreHouseHeader(this);
header.setPadding(0, PtrLocalDisplay.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("Alibaba");
/**
* Material Design风格的头部实现
*/
// final MaterialHeader header = new MaterialHeader(this);
//header.setPadding(0, PtrLocalDisplay.dp2px(15), 0, 0);//显示相关工具类,用于获取用户屏幕宽度、高度以及屏幕密度。同时提供了dp和px的转化方法。
/**
* Rentals Style风格的头部实现
* 这个需要引入这两个类RentalsSunDrawable.java ; RentalsSunHeaderView.java
* 在人家git上的daemon中能找到
*/
/* final RentalsSunHeaderView header = new RentalsSunHeaderView(this);
header.setLayoutParams(new PtrFrameLayout.LayoutParams(-1, -2));
header.setPadding(0, LocalDisplay.dp2px(15), 0, LocalDisplay.dp2px(10));
header.setUp(mPtrFrame);
mPtrFrame.setLoadingMinTime(1000);
mPtrFrame.setDurationToCloseHeader(1500);*/
// mPtrFrame = (PtrFrameLayout) findViewById(R.id.ptr);
mPtrFrame.setHeaderView(header);
// mPtrFrame.setPinContent(true);//刷新时,保持内容不动,仅头部下移,默认,false
mPtrFrame.addPtrUIHandler(header);
//mPtrFrame.setKeepHeaderWhenRefresh(true);//刷新时保持头部的显示,默认为true
//mPtrFrame.disableWhenHorizontalMove(true);//如果是ViewPager,设置为true,会解决ViewPager滑动冲突问题。
mPtrFrame.setPtrHandler(new PtrHandler() {
//需要加载数据时触发
@Override
public void onRefreshBegin(PtrFrameLayout frame) {
System.out.println("MainActivity.onRefreshBegin");
mPtrFrame.postDelayed(new Runnable() {
@Override
public void run() {
mPtrFrame.refreshComplete();
//mPtrFrame.autoRefresh();//自动刷新
}
}, 1800);
}
/**
* 检查是否可以执行下来刷新,比如列表为空或者列表第一项在最上面时。
*/
@Override
public boolean checkCanDoRefresh(PtrFrameLayout frame, View content, View header) {
System.out.println("MainActivity.checkCanDoRefresh");
// 默认实现,根据实际情况做改动
return PtrDefaultHandler.checkContentCanBePulledDown(frame, content, header);
// return true;
}
});
}
总结:到此基本用法就,就写完了。