Android自定义View五加载、空白、错误组合页面

自定义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;
    }

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值