参考地址
https://github.com/liaohuqiu/android-Ultra-Pull-To-Refresh
http://www.jianshu.com/p/9daaa87045d0
导包
compile 'com.android.support:appcompat-v7:24.2.1'//v7包
compile 'com.android.support:design:24.2.1'//包含recyclerView
compile 'in.srain.cube:ultra-ptr:1.0.11'//框架android-Ultra-Pull-To-Refresh
refresh_header.xml
下拉刷新header
import android.content.Context;
import android.graphics.drawable.AnimationDrawable;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.TextView;
import in.srain.cube.views.ptr.PtrFrameLayout;
import in.srain.cube.views.ptr.PtrUIHandler;
import in.srain.cube.views.ptr.indicator.PtrIndicator;
/**
*
* Created by TONG on 2017/3/21.
*/
public class MyRefreshHeader extends FrameLayout implements PtrUIHandler {
/**
* 提醒文本
*/
private TextView mTvRemind;
/**
* logo
*/
private ImageView mIvMan;
/**
* 状态识别
*/
private int mState;
/**
* 重置
* 准备刷新
* 开始刷新
* 结束刷新
*/
public static final int STATE_RESET = -1;
public static final int STATE_PREPARE = 0;
public static final int STATE_BEGIN = 1;
public static final int STATE_FINISH = 2;
public static final int MARGIN_RIGHT = 100;
/**
* 动画
*/
private AnimationDrawable mAnimation;
public MyRefreshHeader(Context context) {
super(context);
initView();
}
public MyRefreshHeader(Context context, AttributeSet attrs) {
super(context, attrs);
initView();
}
public MyRefreshHeader(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
initView();
}
/**
* 初始化view
*/
private void initView() {
View view = LayoutInflater.from(getContext()).inflate(R.layout.refresh_header, this, false);
mTvRemind = (TextView) view.findViewById(R.id.tv_remain);
mIvMan = (ImageView) view.findViewById(R.id.iv_header);
addView(view);
}
@Override
public void onUIReset(PtrFrameLayout frame) {
mState = STATE_RESET;
}
@Override
public void onUIRefreshPrepare(PtrFrameLayout frame) {
mState = STATE_PREPARE;
}
@Override
public void onUIRefreshBegin(PtrFrameLayout frame) {
mState = STATE_BEGIN;
//开启动画
mIvMan.setBackgroundResource(R.drawable.runningman);
mAnimation = (AnimationDrawable) mIvMan.getBackground();
if (!mAnimation.isRunning()) {
mAnimation.start();
}
}
@Override
public void onUIRefreshComplete(PtrFrameLayout frame) {
mState = STATE_FINISH;
//停止动画
if (mAnimation.isRunning()) {
mAnimation.stop();
}
mIvMan.setBackgroundResource(R.mipmap.ic_1);
}
@Override
public void onUIPositionChange(PtrFrameLayout frame, boolean isUnderTouch, byte status, PtrIndicator ptrIndicator) {
//处理提醒字体
switch (mState) {
case STATE_PREPARE:
//logo设置
mIvMan.setAlpha(ptrIndicator.getCurrentPercent());
LayoutParams mIvManLayoutParams = (LayoutParams) mIvMan.getLayoutParams();
if (ptrIndicator.getCurrentPercent() <= 1) {
mIvMan.setScaleX(ptrIndicator.getCurrentPercent());
mIvMan.setScaleY(ptrIndicator.getCurrentPercent());
int marginRight = (int) (MARGIN_RIGHT - MARGIN_RIGHT * ptrIndicator.getCurrentPercent());
mIvManLayoutParams.setMargins(0, 0, marginRight, 0);
mIvMan.setLayoutParams(mIvManLayoutParams);
}
if (ptrIndicator.getCurrentPercent() < 1.2) {
mTvRemind.setText("下拉刷新...");
} else {
mTvRemind.setText("松开刷新...");
}
break;
case STATE_BEGIN:
mTvRemind.setText("更新中...");
break;
case STATE_FINISH:
mTvRemind.setText("加载完成...");
break;
}
}
}
动画效果runningman.xml
MyRefreshLayout
import android.content.Context;
import android.util.AttributeSet;
import in.srain.cube.views.ptr.PtrFrameLayout;
/**
* Created by TONG on 2017/3/21.
*/
public class MyRefreshLayout extends PtrFrameLayout {
/**
* headerView
*/
MyRefreshHeader mHeaderView;
public MyRefreshLayout(Context context) {
super(context);
initView();
}
public MyRefreshLayout(Context context, AttributeSet attrs) {
super(context, attrs);
initView();
}
public MyRefreshLayout(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
initView();
}
/**
* 初始化view
*/
private void initView() {
mHeaderView = new MyRefreshHeader(getContext());
setHeaderView(mHeaderView);
addPtrUIHandler(mHeaderView);
}
}
activity_main.xml
MyAdapter
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;
import java.util.List;
/**
* Created by Administrator on 2016/12/5.
*/
public class MyAdapter extends RecyclerView.Adapter {
/**
* 数据
*/
private List
MainActivity
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import java.util.ArrayList;
import java.util.List;
import in.srain.cube.views.ptr.PtrDefaultHandler;
import in.srain.cube.views.ptr.PtrFrameLayout;
public class MainActivity extends AppCompatActivity {
/**
* 列表
*/
RecyclerView mRecyclerView;
/**
* 下拉刷新
*/
MyRefreshLayout mLayout;
/**
* 布局管理器
*/
RecyclerView.LayoutManager mManager;
/**
* 数据
*/
private List mDatas;
/**
* 适配器
*/
private MyAdapter mAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mDatas=new ArrayList<>();
for(int i=0;i<5;i++){
mDatas.add(new Object());
}
mLayout = (MyRefreshLayout) findViewById(R.id.test_recycler_view_frame);
mRecyclerView = (RecyclerView) findViewById(R.id.test_recycler_view);
mManager = new LinearLayoutManager(this);
mRecyclerView.setLayoutManager(mManager);
mAdapter=new MyAdapter(mDatas);
mRecyclerView.setAdapter(mAdapter);
mLayout.setPtrHandler(new PtrDefaultHandler() {
@Override
public void onRefreshBegin(PtrFrameLayout frame) {
doSth();
}
});
}
/**
* demo
*/
private void doSth() {
new AsyncTask() {
@Override
protected Void doInBackground(Void... params) {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
mDatas.clear();
for(int i=0;i<5;i++){
mDatas.add(new Object());
}
mAdapter.notifyDataSetChanged();
mLayout.refreshComplete();
}
}.execute();
}
}