package com.dl7.mvp.widget;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Color;
import android.support.annotation.IntDef;
import android.util.AttributeSet;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.TextView;
import com.dl7.mvp.R;
import com.github.ybq.android.spinkit.SpinKitView;
import com.github.ybq.android.spinkit.sprite.Sprite;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
/**
* Created by long on 2016/8/23.
* 加载、空视图
*/
public class EmptyLayout extends FrameLayout {
public static final int STATUS_HIDE = 1001;
public static final int STATUS_LOADING = 1;
public static final int STATUS_NO_NET = 2;
public static final int STATUS_NO_DATA = 3;
private Context mContext;
private OnRetryListener mOnRetryListener;
private int mEmptyStatus = STATUS_LOADING;
private int mBgColor;
@BindView(R.id.tv_net_error)
TextView mTvEmptyMessage;
@BindView(R.id.rl_empty_container)
View mRlEmptyContainer;
@BindView(R.id.empty_loading)
SpinKitView mEmptyLoading;
@BindView(R.id.empty_layout)
FrameLayout mEmptyLayout;
public EmptyLayout(Context context) {
this(context, null);
}
public EmptyLayout(Context context, AttributeSet attrs) {
super(context, attrs);
this.mContext = context;
init(attrs);
}
/**
* 初始化
*/
private void init(AttributeSet attrs) {
TypedArray a = mContext.obtainStyledAttributes(attrs, R.styleable.EmptyLayout);
try {
mBgColor = a.getColor(R.styleable.EmptyLayout_background_color, Color.WHITE);
} finally {
a.recycle();
}
View.inflate(mContext, R.layout.layout_empty_loading, this);
ButterKnife.bind(this);
mEmptyLayout.setBackgroundColor(mBgColor);
_switchEmptyView();
}
/**
* 隐藏视图
*/
public void hide() {
mEmptyStatus = STATUS_HIDE;
_switchEmptyView();
}
/**
* 设置状态
*
* @param emptyStatus
*/
public void setEmptyStatus(@EmptyStatus int emptyStatus) {
mEmptyStatus = emptyStatus;
_switchEmptyView();
}
/**
* 获取状态
* @return 状态
*/
public int getEmptyStatus() {
return mEmptyStatus;
}
/**
* 设置异常消息
*
* @param msg 显示消息
*/
public void setEmptyMessage(String msg) {
mTvEmptyMessage.setText(msg);
}
public void hideErrorIcon() {
mTvEmptyMessage.setCompoundDrawables(null, null, null, null);
}
// /**
// * 设置图标
// * @param resId 资源ID
// */
// public void setEmptyIcon(int resId) {
// mIvEmptyIcon.setImageResource(resId);
// }
//
// /**
// * 设置图标
// * @param drawable drawable
// */
// public void setEmptyIcon(Drawable drawable) {
// mIvEmptyIcon.setImageDrawable(drawable);
// }
public void setLoadingIcon(Sprite d) {
mEmptyLoading.setIndeterminateDrawable(d);
}
/**
* 切换视图
*/
private void _switchEmptyView() {
switch (mEmptyStatus) {
case STATUS_LOADING:
setVisibility(VISIBLE);
mRlEmptyContainer.setVisibility(GONE);
mEmptyLoading.setVisibility(VISIBLE);
break;
case STATUS_NO_DATA:
case STATUS_NO_NET:
setVisibility(VISIBLE);
mEmptyLoading.setVisibility(GONE);
mRlEmptyContainer.setVisibility(VISIBLE);
break;
case STATUS_HIDE:
setVisibility(GONE);
break;
}
}
/**
* 设置重试监听器
*
* @param retryListener 监听器
*/
public void setRetryListener(OnRetryListener retryListener) {
this.mOnRetryListener = retryListener;
}
@OnClick(R.id.tv_net_error)
public void onClick() {
if (mOnRetryListener != null) {
mOnRetryListener.onRetry();
}
}
/**
* 点击重试监听器
*/
public interface OnRetryListener {
void onRetry();
}
@Retention(RetentionPolicy.SOURCE)
@IntDef({STATUS_LOADING, STATUS_NO_NET, STATUS_NO_DATA})
public @interface EmptyStatus{}
}