自定义view第五篇:加载网络数据的时候加载中和空白 错误等状态的组合控件
public class LoadPageView {
private View rootView;
private View mLoadView;
private View mEmptyView;
private View mErrorView;
private ImageView mEmptyImage;
private TextView mEmptyTitle;
private TextView mEmptyTip;
private TextView mEmptyButton;
private ImageView mErrorImage;
private TextView mErrorText;
private TextView mErrorButton;
private Context mContext;
private List<View> mViewList;
public enum LoadState {
LOADING,
EMPTY,
ERROR,
SUCCESS
}
private LoadPageView(Build build) {
this.mContext = build.activity;
this.mLoadView = build.loadView;
this.mEmptyView = build.emptyView;
this.mErrorView = build.errorView;
this.mViewList = build.viewList;
initRootView();
}
private void initRootView() {
FrameLayout frameLayout = new FrameLayout(mContext);
frameLayout.addView(mLoadView);
frameLayout.addView(mErrorView);
frameLayout.addView(mEmptyView);
mLoadView.setVisibility(View.GONE);
mErrorView.setVisibility(View.GONE);
mEmptyView.setVisibility(View.GONE);
rootView = frameLayout;
rootView.setVisibility(View.GONE);
View.OnClickListener listener = new View.OnClickListener() {
@Override
public void onClick(View v) {
}
};
mLoadView.setOnClickListener(listener);
mErrorView.setOnClickListener(listener);
mEmptyView.setOnClickListener(listener);
if (mViewList.size() > 0) {
final View view = mViewList.get(0);
view.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
int viewHeight = 0;
for (View view : mViewList) {
viewHeight += view.getMeasuredHeight();
}
rootView.setPadding(0, viewHeight, 0, 0);
view.getViewTreeObserver().removeGlobalOnLayoutListener(this);
}
});
}
this.mEmptyImage = (ImageView) mEmptyView.findViewById(R.id.iv_page_empty);
this.mEmptyTitle = (TextView) mEmptyView.findViewById(R.id.tv_page_empty_title);
this.mEmptyTip = (TextView) mEmptyView.findViewById(R.id.tv_page_empty_tip);
this.mEmptyButton = (TextView)mEmptyView.findViewById(R.id.btn_page_empty);
this.mErrorImage = (ImageView) mErrorView.findViewById(R.id.iv_page_error);
this.mErrorText = (TextView) mErrorView.findViewById(R.id.tv_page_error);
this.mErrorButton = (TextView) mErrorView.findViewById(R.id.btn_page_error);
}
public LoadPageView setEmptyViewImg(Drawable drawable) {
if (mEmptyImage != null) {
mEmptyImage.setImageDrawable(drawable);
}
return this;
}
public LoadPageView setEmptyViewImg(Bitmap bitmap) {
if (mEmptyImage != null) {
mEmptyImage.setImageBitmap(bitmap);
}
return this;
}
public LoadPageView setEmptyViewImg(@DrawableRes int resId) {
if (resId > 0 && mEmptyImage != null) {
mEmptyImage.setImageResource(resId);
}
return this;
}
public LoadPageView setEmptyViewText(CharSequence title, CharSequence tip) {
if (mEmptyTitle != null)
mEmptyTitle.setText(title);
if (mEmptyTip != null)
mEmptyTip.setText(tip);
return this;
}
public LoadPageView setEmptyViewText(@StringRes int titleResId, @StringRes int tipResId) {
if (titleResId > 0 && mEmptyTitle != null)
mEmptyTitle.setText(titleResId);
if (tipResId > 0 && mEmptyTip != null)
mEmptyTip.setText(tipResId);
return this;
}
public LoadPageView setErrorViewImg(Drawable drawable) {
if (mErrorImage != null) {
mErrorImage.setImageDrawable(drawable);
}
return this;
}
public LoadPageView setErrorViewImg(Bitmap bitmap) {
if (mErrorImage != null) {
mErrorImage.setImageBitmap(bitmap);
}
return this;
}
public LoadPageView setErrorViewImg(@DrawableRes int resId) {
if (resId > 0 && mErrorImage != null) {
mErrorImage.setImageResource(resId);
}
return this;
}
public LoadPageView setErrorViewText(CharSequence text) {
if (mErrorText != null) {
mErrorText.setText(text);
}
return this;
}
public LoadPageView setErrorViewText(@StringRes int resId) {
if (resId > 0 && mErrorText != null) {
mErrorText.setText(resId);
}
return this;
}
public LoadPageView setErrorButtonClickListener(View.OnClickListener l) {
mErrorButton.setVisibility(View.VISIBLE);
mErrorButton.setOnClickListener(l);
return this;
}
public LoadPageView setEmptyButtonClickListener(View.OnClickListener l){
mEmptyButton.setVisibility(View.VISIBLE);
mEmptyButton.setOnClickListener(l);
return this;
}
public void setLoadState(LoadState state) {
if (mErrorView.getVisibility() == View.VISIBLE)
mErrorView.setVisibility(View.GONE);
if (mLoadView.getVisibility() == View.VISIBLE)
mLoadView.setVisibility(View.GONE);
if (mEmptyView.getVisibility() == View.VISIBLE)
mEmptyView.setVisibility(View.GONE);
switch (state) {
case LOADING:
rootView.setVisibility(View.VISIBLE);
mLoadView.setVisibility(View.VISIBLE);
break;
case EMPTY:
rootView.setVisibility(View.VISIBLE);
mEmptyView.setVisibility(View.VISIBLE);
break;
case ERROR:
rootView.setVisibility(View.VISIBLE);
mErrorView.setVisibility(View.VISIBLE);
break;
case SUCCESS:
rootView.setVisibility(View.GONE);
break;
}
}
public static final class Build {
Activity activity;
View loadView;
View emptyView;
View errorView;
List<View> viewList;
private ViewGroup parent;
private LayoutInflater inflater;
public Build loadView(@LayoutRes int resId) {
if (resId > 0) {
loadView = inflater.inflate(resId, null);
}
return this;
}
public Build loadView(View view) {
if (view != null) {
loadView = view;
}
return this;
}
public Build emptyView(@LayoutRes int resId) {
if (resId > 0) {
emptyView = inflater.inflate(resId, null);
}
return this;
}
public Build emptyView(View view) {
if (view != null) {
emptyView = view;
}
return this;
}
public Build errorView(@LayoutRes int resId) {
if (resId > 0) {
errorView = inflater.inflate(resId, null);
}
return this;
}
public Build errorView(View view) {
if (view != null) {
errorView = view;
}
return this;
}
public Build view(View view) {
viewList.add(view);
return this;
}
public Build(Activity activity) {
this.activity = activity;
this.inflater = LayoutInflater.from(activity);
this.viewList = new ArrayList<>();
this.loadView(R.layout.layout_page_load).
emptyView(R.layout.layout_page_empty).
errorView(R.layout.layout_page_error);
}
public Build(ViewGroup parent) {
this.activity = (Activity) parent.getContext();
this.parent = parent;
this.inflater = LayoutInflater.from(activity);
this.viewList = new ArrayList<>();
this.loadView(R.layout.layout_page_load).
emptyView(R.layout.layout_page_empty).
errorView(R.layout.layout_page_error);
}
public Build(View view) {
this.activity = (Activity) view.getContext();
this.parent = (ViewGroup) view;
this.inflater = LayoutInflater.from(activity);
this.viewList = new ArrayList<>();
this.loadView(R.layout.layout_page_load).
emptyView(R.layout.layout_page_empty).
errorView(R.layout.layout_page_error);
}
public LoadPageView build() {
LoadPageView loadPageView = new LoadPageView(this);
ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(-1, -1);
if (parent != null) parent.addView(loadPageView.rootView, params);
else activity.addContentView(loadPageView.rootView, params);
return loadPageView;
}
}
}