package com.grumoon.androidultrapulltorefreshdemo.header; import android.content.Context; import android.util.AttributeSet; import android.view.LayoutInflater; import android.view.ViewGroup; import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.TextView; import com.grumoon.androidultrapulltorefreshdemo.R; import in.srain.cube.views.ptr.PtrFrameLayout; import in.srain.cube.views.ptr.PtrUIHandler; /** * Created by grumoon on 2015/1/20. */ public class WindmillHeader extends FrameLayout implements PtrUIHandler { private LayoutInflater inflater; // 下拉刷新视图(头部视图) private ViewGroup headView; // 下拉刷新文字 private TextView tvHeadTitle; // 下拉图标 private ImageView ivWindmill; private WindmillDrawable drawable; public WindmillHeader(Context context) { this(context, null); } public WindmillHeader(Context context, AttributeSet attrs) { this(context, attrs, 0); } public WindmillHeader(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(context); } /** * 初始化 * * @param context */ private void init(Context context) { inflater = LayoutInflater.from(context); /** * 头部 */ headView = (ViewGroup) inflater.inflate(R.layout.windmill_header, this, true); ivWindmill = (ImageView) headView.findViewById(R.id.iv_windmill); tvHeadTitle = (TextView) headView.findViewById(R.id.tv_head_title); drawable = new WindmillDrawable(context, ivWindmill); ivWindmill.setImageDrawable(drawable); } @Override public void onUIReset(PtrFrameLayout ptrFrameLayout) { tvHeadTitle.setText("下拉刷新"); drawable.stop(); } @Override public void onUIRefreshPrepare(PtrFrameLayout ptrFrameLayout) { tvHeadTitle.setText("下拉刷新"); } @Override public void onUIRefreshBegin(PtrFrameLayout ptrFrameLayout) { tvHeadTitle.setText("正在刷新"); drawable.start(); } @Override public void onUIRefreshComplete(PtrFrameLayout ptrFrameLayout) { ivWindmill.clearAnimation(); tvHeadTitle.setText("刷新完成"); } @Override public void onUIPositionChange(PtrFrameLayout frame, boolean isUnderTouch, byte status, int lastPos, int currentPos, float oldPercent, float currentPercent) { if (isUnderTouch && status == PtrFrameLayout.PTR_STATUS_PREPARE) { drawable.postRotation(currentPos - lastPos); invalidate(); } final int mOffsetToRefresh = frame.getOffsetToRefresh(); if (currentPos < mOffsetToRefresh && lastPos >= mOffsetToRefresh) { if (isUnderTouch && status == PtrFrameLayout.PTR_STATUS_PREPARE) { tvHeadTitle.setText("下拉刷新"); } } else if (currentPos > mOffsetToRefresh && lastPos <= mOffsetToRefresh) { if (isUnderTouch && status == PtrFrameLayout.PTR_STATUS_PREPARE) { tvHeadTitle.setText("松开刷新"); } } } }