下拉刷新框架Android-Ultra-Pull-To-Refresh的使用

时间:2022-10-29 20:37:20

GitHub地址:https://github.com/liaohuqiu/android-Ultra-Pull-To-Refresh

首先看下项目结构:

下拉刷新框架Android-Ultra-Pull-To-Refresh的使用

在ptr-demo中的build.gradle中

compile 'in.srain.cube:clog:1.0.2'
compile 'in.srain.cube:cube-sdk:1.0.44.38'

在整个项目中app的build.gradle中

compile(project(':ptr-lib'))

在布局文件中使用PtrClassicFrameLayout

<?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"
android:background="#ffffff">


<in.srain.cube.views.ptr.PtrClassicFrameLayout
xmlns:cube_ptr="http://schemas.android.com/apk/res-auto"
android:id="@+id/fragment_rotate_header_with_text_view_frame"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#fff"
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-->
</in.srain.cube.views.ptr.PtrClassicFrameLayout>

</RelativeLayout>

在自定义PtrClassicFrameLayout中可以放入任何view

SecondActivity.java

package com.zhoujian.application;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import in.srain.cube.views.ptr.PtrClassicFrameLayout;
import in.srain.cube.views.ptr.PtrDefaultHandler;
import in.srain.cube.views.ptr.PtrFrameLayout;

/**
* Created by zhoujian on 2017/1/9.
*/


public class SecondActivity extends Activity
{


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);

final PtrClassicFrameLayout ptrFrame = (PtrClassicFrameLayout) findViewById(R.id.fragment_rotate_header_with_text_view_frame);

ptrFrame.setLastUpdateTimeRelateObject(this);
ptrFrame.setPtrHandler(new PtrDefaultHandler() {
@Override
public void onRefreshBegin(PtrFrameLayout frame) {
frame.postDelayed(new Runnable() {
@Override
public void run() {
ptrFrame.refreshComplete();
}
}, 1500);
}

@Override
public boolean checkCanDoRefresh(PtrFrameLayout frame, View content, View header) {
return true;
}
});
}
}

activity_second.xml

<?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"
android:background="#ffffff">


<in.srain.cube.views.ptr.PtrClassicFrameLayout
xmlns:cube_ptr="http://schemas.android.com/apk/res-auto"
android:id="@+id/fragment_rotate_header_with_text_view_frame"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#fff"
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">

<TextView
android:id="@+id/fragment_rotate_header_with_text_view_content"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#2175ed"
android:clickable="true"
android:gravity="center"
android:text="我是TextView"
android:textColor="#000000"
android:textSize="30sp"/>


</in.srain.cube.views.ptr.PtrClassicFrameLayout>

</RelativeLayout>

运行截图:

下拉刷新框架Android-Ultra-Pull-To-Refresh的使用

MainActivity.java

package com.zhoujian.application;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import in.srain.cube.views.ptr.PtrFrameLayout;
import in.srain.cube.views.ptr.PtrHandler;
import in.srain.cube.views.ptr.header.MaterialHeader;
import in.srain.cube.views.ptr.util.PtrLocalDisplay;

public class MainActivity extends Activity {

//下拉刷新框架android-Ultra-Pull-To-Refresh

private boolean mImageHasLoaded = false;
private long mStartLoadingTime = -1;

@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button start = (Button)findViewById(R.id.start);
start.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {


startActivity(new Intent(MainActivity.this,SecondActivity.class));
}
});


final PtrFrameLayout mPtrFrameLayout = (PtrFrameLayout)findViewById(R.id.material_style_ptr_frame);

// header
final MaterialHeader header = new MaterialHeader(MainActivity.this);
int[] colors = getResources().getIntArray(R.array.google_colors);
header.setColorSchemeColors(colors);
header.setLayoutParams(new PtrFrameLayout.LayoutParams(-1, -2));
header.setPadding(0, PtrLocalDisplay.dp2px(15), 0, PtrLocalDisplay.dp2px(10));
header.setPtrFrameLayout(mPtrFrameLayout);

mPtrFrameLayout.setLoadingMinTime(1000);
mPtrFrameLayout.setDurationToCloseHeader(1500);
mPtrFrameLayout.setHeaderView(header);
mPtrFrameLayout.addPtrUIHandler(header);
/* mPtrFrameLayout.postDelayed(new Runnable() {
@Override
public void run() {
mPtrFrameLayout.autoRefresh(false);
}
}, 100);*/


mPtrFrameLayout.setPtrHandler(new PtrHandler() {
@Override
public boolean checkCanDoRefresh(PtrFrameLayout frame, View content, View header) {
return true;
}

@Override
public void onRefreshBegin(final PtrFrameLayout frame) {
if (mImageHasLoaded) {
long delay = (long) (1000 + Math.random() * 2000);
delay = Math.max(0, delay);
delay = 0;
frame.postDelayed(new Runnable() {
@Override
public void run() {

frame.refreshComplete();
}
}, delay);
} else {
mStartLoadingTime = System.currentTimeMillis();
mPtrFrameLayout.refreshComplete();
}
}
});
}
}

activity_main.xml

<?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"
android:background="#ffffff">


<in.srain.cube.views.ptr.PtrFrameLayout
xmlns:cube_ptr="http://schemas.android.com/apk/res-auto"
android:id="@+id/material_style_ptr_frame"
android:layout_width="match_parent"
android:layout_height="match_parent"
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"
cube_ptr:ptr_ratio_of_header_height_to_refresh="1.2"
cube_ptr:ptr_resistance="1.7">



<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#2175ed"
android:gravity="center"
android:orientation="vertical">


<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:clickable="true"
android:text="我是TextView"
android:textColor="#000000"
android:textSize="30sp"/>


<Button
android:id="@+id/start"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:text="跳转界面"/>

</LinearLayout>

</in.srain.cube.views.ptr.PtrFrameLayout>


</RelativeLayout>

运行截图:

下拉刷新框架Android-Ultra-Pull-To-Refresh的使用

源码下载

源码下载:https://github.com/zeke123/MyApplication2