package mcxtzhang.recyclerviewdemo.generalizerv.base.widget; import android.content.Context; import android.util.AttributeSet; import android.view.View; import android.view.ViewStub; import android.widget.ProgressBar; import android.widget.RelativeLayout; import mcxtzhang.recyclerviewdemo.R; /** * 介绍:ListView/GridView/RecyclerView 分页加载时使用到的FooterView * 作者:xjzhao * 邮箱:mr.feeling.heart@gmail.com * 时间: 2016-03-16 下午6:12 */ public class LoadingFooter extends RelativeLayout { protected State mState = State.Normal; private View mLoadingView; private View mNetworkErrorView; private View mTheEndView; private ProgressBar mLoadingProgress; // private TextView mLoadingText; private OnLoadErrorClickListener mOnLoadErrorClickListener; private OnStateChangeListener onStateChangeListener; public LoadingFooter(Context context) { super(context); init(context); } public LoadingFooter(Context context, AttributeSet attrs) { super(context, attrs); init(context); } public LoadingFooter(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(context); } public LoadingFooter(Context context, OnLoadErrorClickListener l) { super(context); this.mOnLoadErrorClickListener = l; init(context); } private boolean isAniming; public void onResumeLoading() { if (!isAniming && null != mLoadingProgress) { isAniming = true; mLoadingProgress.setVisibility(View.VISIBLE); } } public void onPauseLoading() { if (isAniming && null != mLoadingProgress) { isAniming = false; mLoadingProgress.setVisibility(View.GONE); } } public void init(Context context) { inflate(context, R.layout.app_loading_footer, this); setOnClickListener(null); setState(State.Normal, true); } public State getState() { return mState; } public void setOnStateChangeListener(OnStateChangeListener onStateChangeListener) { this.onStateChangeListener = onStateChangeListener; } public void setState(State status) { setState(status, true); } /** * 设置状态 * * @param status * @param showView 是否展示当前View */ public void setState(State status, boolean showView) { if (mState == status) { return; } mState = status; switch (status) { case Normal: setVisibility(GONE); setOnClickListener(null); onPauseLoading(); // if (mLoadingView != null) { // mLoadingView.setVisibility(GONE); // } // // if (mTheEndView != null) { // mTheEndView.setVisibility(GONE); // } // // if (mNetworkErrorView != null) { // mNetworkErrorView.setVisibility(GONE); // } break; case Loading: onResumeLoading(); setVisibility(VISIBLE); setOnClickListener(null); if (mTheEndView != null) { mTheEndView.setVisibility(GONE); } if (mNetworkErrorView != null) { mNetworkErrorView.setVisibility(GONE); } if (mLoadingView == null) { ViewStub viewStub = (ViewStub) findViewById(R.id.loading_viewstub); mLoadingView = viewStub.inflate(); mLoadingProgress = (ProgressBar) mLoadingView.findViewById(R.id.progressBar); // mLoadingText = (TextView) mLoadingView.findViewById(R.id.loading_text); } else { mLoadingView.setVisibility(VISIBLE); } mLoadingView.setVisibility(showView ? VISIBLE : GONE); mLoadingProgress.setVisibility(View.VISIBLE); // mLoadingText.setText(R.string.list_footer_loading); onResumeLoading(); setOnClickListener(null); break; case End: onPauseLoading(); setVisibility(VISIBLE); setOnClickListener(null); if (mLoadingView != null) { mLoadingView.setVisibility(GONE); } if (mNetworkErrorView != null) { mNetworkErrorView.setVisibility(GONE); } if (mTheEndView == null) { ViewStub viewStub = (ViewStub) findViewById(R.id.end_viewstub); mTheEndView = viewStub.inflate(); } else { mTheEndView.setVisibility(VISIBLE); } mTheEndView.setVisibility(showView ? VISIBLE : GONE); setOnClickListener(null); break; case Error: onPauseLoading(); setVisibility(VISIBLE); if (mLoadingView != null) { mLoadingView.setVisibility(GONE); } if (mTheEndView != null) { mTheEndView.setVisibility(GONE); } if (mNetworkErrorView == null) { ViewStub viewStub = (ViewStub) findViewById(R.id.network_error_viewstub); mNetworkErrorView = viewStub.inflate(); } else { mNetworkErrorView.setVisibility(VISIBLE); } mNetworkErrorView.setVisibility(showView ? VISIBLE : GONE); setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (null != mOnLoadErrorClickListener) { mOnLoadErrorClickListener.onClick(); } } }); break; default: break; } } public boolean isNeewVisible() { switch (mState) { case Normal: return false; case Loading: case End: case Error: return true; default: return true; } } public interface OnLoadErrorClickListener { void onClick(); } public enum State { Normal/**正常*/ , End /**加载到最底了*/ , Loading/**加载中..*/ , Error /**加载失败,点击重试*/ } public interface OnStateChangeListener { void onVisible(boolean visible); } }