package com.limemobile.app.launcher.view;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Rect;
import android.graphics.drawable.BitmapDrawable;
import android.util.AttributeSet;
import android.widget.ImageView;
import com.limemobile.app.launcher.wp8.R;
public class IndicatorView extends ImageView {
private Context mContext;
private int mCurrent = 0;
private int mTotal = 0;
private BitmapDrawable mNormalIndicator;
private BitmapDrawable mSelectedIndicator;
public IndicatorView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init(context);
}
public IndicatorView(Context context, AttributeSet attrs) {
super(context, attrs);
init(context);
}
public IndicatorView(Context context) {
super(context);
init(context);
}
private void init(Context context) {
mContext = context;
mNormalIndicator = new BitmapDrawable(mContext.getResources().openRawResource(R.drawable.indicator_normal));
mSelectedIndicator = new BitmapDrawable(mContext.getResources().openRawResource(R.drawable.indicator_focus));
}
public void setIndicator(int indicator) {
mCurrent = indicator;
}
public void setTotalCount(int count) {
mTotal = count;
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
float scale = mContext.getResources().getDisplayMetrics().scaledDensity;
int width = getWidth();
int height = getHeight();
int iconWidth = (int) (mSelectedIndicator.getIntrinsicWidth() * scale);
int iconHeight = (int) (mSelectedIndicator.getIntrinsicHeight() * scale);
int left = getLeft() + (width - (mTotal * iconWidth)) / 2;
int top = /*getTop() + */(height - iconHeight) / 2;
for (int index = 0; index < mTotal; ++index) {
BitmapDrawable bitmap = null;
if (index == mCurrent)
bitmap = mSelectedIndicator;
else
bitmap = mNormalIndicator;
Rect bounds = new Rect(left + index * iconWidth, top,
left + (index + 1)* iconWidth, top + iconHeight);
bitmap.setBounds(bounds);
bitmap.draw(canvas);
}
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
// int widthSpecMode = MeasureSpec.getMode(widthMeasureSpec);
int widthSpecSize = MeasureSpec.getSize(widthMeasureSpec);
// int heightSpecMode = MeasureSpec.getMode(heightMeasureSpec);
// int heightSpecSize = MeasureSpec.getSize(heightMeasureSpec);
float scale = mContext.getResources().getDisplayMetrics().scaledDensity;
setMeasuredDimension(widthSpecSize, (int)(mSelectedIndicator.getIntrinsicHeight() * scale));
}
@Override
protected void onDetachedFromWindow() {
if (mSelectedIndicator != null && mSelectedIndicator.getBitmap() != null && !mSelectedIndicator.getBitmap().isRecycled()) {
mSelectedIndicator.setCallback(null);
mSelectedIndicator.getBitmap().recycle();
}
if (mNormalIndicator != null && mNormalIndicator.getBitmap() != null && !mNormalIndicator.getBitmap().isRecycled()) {
mNormalIndicator.setCallback(null);
mNormalIndicator.getBitmap().recycle();
}
super.onDetachedFromWindow();
}
}