package cn.mutils.app.ui;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.View;
import cn.mutils.app.R;
import cn.mutils.app.event.listener.OnSelectedChangeListener;
import cn.mutils.app.util.AppUtil;
@SuppressWarnings("unused")
public class IndexView extends View {
protected int mSize = 0;
protected int mSelectedIndex = -1;
protected OnSelectedChangeListener mOnSelectedChangeListener;
protected Paint mPaint = new Paint();
protected int mItemBgColor = 0xFFB2B2B2;
protected int mItemSelectedColor = 0xFF8EC43E;
protected int mItemWidth = 8;
public IndexView(Context context) {
super(context);
init(context, null);
}
public IndexView(Context context, AttributeSet attrs) {
super(context, attrs);
init(context, attrs);
}
public IndexView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(context, attrs);
}
protected void init(Context context, AttributeSet attrs) {
mPaint.setAntiAlias(true);
mItemWidth = (int) AppUtil.dp2px(context, 8);
if (attrs != null) {
TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.IndexView);
mItemBgColor = typedArray.getColor(R.styleable.IndexView_bgColor, mItemBgColor);
mItemSelectedColor = typedArray.getColor(R.styleable.IndexView_strokeColor, mItemSelectedColor);
mItemWidth = typedArray.getDimensionPixelSize(R.styleable.IndexView_strokeWidth, mItemWidth);
typedArray.recycle();
}
}
public int getSelectedIndex() {
return mSelectedIndex;
}
public void setSelectedIndex(int selectedIndex) {
if (selectedIndex < 0 || selectedIndex >= mSize) {
mSelectedIndex = -1;
this.invalidate();
return;
}
if (mSelectedIndex == selectedIndex) {
return;
}
if (mOnSelectedChangeListener != null) {
if (mOnSelectedChangeListener.onInterceptChange(this, selectedIndex)) {
return;
}
}
mSelectedIndex = selectedIndex;
this.invalidate();
if (mOnSelectedChangeListener != null) {
mOnSelectedChangeListener.onChanged(this, mSelectedIndex);
}
}
public int getSize() {
return mSize;
}
public void setSize(int size) {
if (mSize == size) {
return;
}
mSize = size;
setSelectedIndex(mSize > 0 ? 0 : -1);
this.invalidate();
}
public void setOnSelectedChangedListener(OnSelectedChangeListener listener) {
mOnSelectedChangeListener = listener;
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
if (MeasureSpec.getMode(widthMeasureSpec) == MeasureSpec.AT_MOST) {
int width = getPaddingTop() + getPaddingBottom();
if (mSize > 0) {
width += (mSize + mSize + 1) * mItemWidth;
}
widthMeasureSpec = MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY);
}
if (MeasureSpec.getMode(heightMeasureSpec) == MeasureSpec.AT_MOST) {
int height = getPaddingTop() + getPaddingBottom() + mItemWidth;
heightMeasureSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY);
}
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
@Override
protected void onDraw(Canvas canvas) {
int w = this.getWidth();
int h = this.getHeight();
int itemsWidth = mSize > 0 ? ((mSize + mSize + 1) * mItemWidth) : 0;
int l = this.getPaddingLeft();
int r = w - this.getPaddingRight();
int x = l + (r - l - itemsWidth) / 2;
int y = h / 2;
int radius = mItemWidth / 2;
for (int i = 0; i < mSize; i++) {
mPaint.setColor(i == mSelectedIndex ? mItemSelectedColor : mItemBgColor);
x += mItemWidth;// Gap size
canvas.drawCircle(x + radius, y, radius, mPaint);
x += mItemWidth;// Item size
}
}
}