package in.srain.cube.views;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.Gravity;
import android.view.View;
import android.widget.LinearLayout;
import in.srain.cube.R;
import in.srain.cube.views.banner.PagerIndicator;
public class DotView extends LinearLayout implements PagerIndicator {
public interface OnDotClickHandler {
public void onDotClick(int index);
}
private int mLittleDotSize = -2;
private int mDotSpan = 36;
private float mDotRadius = 6f;
private int mCurrent = 0;
private int mTotal = 0;
private int mSelectedColor = 0xFF377BEE;
private int mUnSelectedColor = 0xFFC5CEDB;
private OnDotClickHandler mOnDotClickHandler;
public DotView(Context context) {
super(context);
}
public DotView(Context context, AttributeSet attrs) {
super(context, attrs);
setGravity(Gravity.CENTER_HORIZONTAL);
TypedArray arr = context.obtainStyledAttributes(attrs, R.styleable.DotView, 0, 0);
if (arr != null) {
if (arr.hasValue(R.styleable.DotView_dot_radius)) {
mDotRadius = arr.getDimension(R.styleable.DotView_dot_radius, mDotRadius);
}
if (arr.hasValue(R.styleable.DotView_dot_span)) {
mDotSpan = (int) arr.getDimension(R.styleable.DotView_dot_span, mDotSpan);
}
mSelectedColor = arr.getColor(R.styleable.DotView_dot_selected_color, mSelectedColor);
mUnSelectedColor = arr.getColor(R.styleable.DotView_dot_unselected_color, mUnSelectedColor);
arr.recycle();
}
mLittleDotSize = (int) (mDotSpan / 2 + mDotRadius * 2);
}
@Override
public final void setNum(int num) {
if (num < 0)
return;
mTotal = num;
removeAllViews();
setOrientation(HORIZONTAL);
for (int i = 0; i < num; i++) {
LittleDot dot = new LittleDot(getContext(), i);
if (i == 0) {
dot.setColor(mSelectedColor);
} else {
dot.setColor(mUnSelectedColor);
}
dot.setLayoutParams(new LayoutParams((int) mLittleDotSize, (int) mDotRadius * 2, 1));
dot.setClickable(true);
dot.setOnClickListener(mDotClickHandler);
addView(dot);
}
}
@Override
public int getTotal() {
return mTotal;
}
@Override
public int getCurrentIndex() {
return mCurrent;
}
public void setOnDotClickHandler(OnDotClickHandler handler) {
mOnDotClickHandler = handler;
}
private OnClickListener mDotClickHandler = new OnClickListener() {
@Override
public void onClick(View v) {
if (v instanceof LittleDot && null != mOnDotClickHandler) {
mOnDotClickHandler.onDotClick(((LittleDot) v).getIndex());
}
}
};
public final void setSelected(int index) {
if (index >= getChildCount() || index < 0 || mCurrent == index)
return;
((LittleDot) getChildAt(mCurrent)).setColor(mUnSelectedColor);
((LittleDot) getChildAt(index)).setColor(mSelectedColor);
mCurrent = index;
}
private class LittleDot extends View {
private int mColor;
private Paint mPaint;
private int mIndex;
public LittleDot(Context context, int index) {
super(context);
mPaint = new Paint();
mPaint.setAntiAlias(true);
mIndex = index;
}
public int getIndex() {
return mIndex;
}
public void setColor(int color) {
if (color == mColor)
return;
mColor = color;
invalidate();
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
mPaint.setColor(mColor);
canvas.drawCircle(mLittleDotSize / 2, mDotRadius, mDotRadius, mPaint);
}
}
}