package com.yuan.refresh;
import android.content.Context;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
public class GoRefreshLayout extends LinearLayout {
private BaseRefreshmanager mRefreshManager;
private Context mContext;
private View mHeadView;
private int mHeadViewHeight;
private int minHeadViewHeight; // 头部布局最小的一个高度
private int maxHeadViewHeight; // 头部布局最大的一个高度
public GoRefreshLayout(Context context) {
super(context);
initView(context);
}
public GoRefreshLayout(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
initView(context);
}
public GoRefreshLayout(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
initView(context);
}
private void initView(Context context) {
mContext = context;
}
/**
* 开启下拉刷新, 下拉刷新的效果是默认的
*/
public void setRefreshManager() {
mRefreshManager = new DeafultRefreshManager(mContext);
intHeaderView();
}
/**
* 开启下拉刷新, 下拉刷新的效果是自定义
*
* @param manager
*/
public void setRefreshManager(BaseRefreshmanager manager) {
mRefreshManager = manager;
intHeaderView();
}
private void intHeaderView() {
Log.i("hetaorefresh", "intHeaderView:");
setOrientation(VERTICAL);
mHeadView = mRefreshManager.getHeaderView();
mHeadView.measure(0,0);
mHeadViewHeight = mHeadView.getMeasuredHeight();
minHeadViewHeight = -mHeadViewHeight;
maxHeadViewHeight = (int) (mHeadViewHeight * 0.3f);
LayoutParams params = new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,mHeadViewHeight);
params.topMargin = minHeadViewHeight;
addView(mHeadView,0,params);
}
private int downY;
@Override
public boolean onTouchEvent(MotionEvent event) {
Log.i("hetaorefresh", "MotionEvent:");
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
downY = (int) event.getY();
return true;
case MotionEvent.ACTION_MOVE:
int moveY = (int) event.getY();
int dy = moveY - downY;
Log.i("hetaorefresh", "dy:" + dy);
if (dy > 0) {
LayoutParams layoutParams = (LayoutParams) mHeadView.getLayoutParams();
//阻尼效果
layoutParams.topMargin = (int) Math.min(dy / 1.8f + minHeadViewHeight, maxHeadViewHeight);
mHeadView.setLayoutParams(layoutParams);
}
return true;
case MotionEvent.ACTION_UP:
break;
default:
break;
}
return true;
}
}