package com.aincc.lib.ui.widget.page;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.util.TypedValue;
import android.view.MotionEvent;
import android.view.View;
/**
*
* <h3><b>PageIndicator</b></h3></br>
*
* 페이지 표시 GUI <br>
* '•' 색상 구분 표시를 활용하여 현재 페이지 및 페이지 이동을 표시한다.
*
* @author aincc@barusoft.com
* @version 1.0.0
* @since 1.0.0
*/
public class PageIndicator extends View
{
/**
* paint
*
* @since 1.0.0
*/
private Paint paint;
/**
* max page count (default:10)
*
* @since 1.0.0
*/
private int maxPage = 10;
/**
* page index
*
* @since 1.0.0
*/
private int page = 0;
/**
* radius value
*
* @since 1.0.0
*/
private float radius;
/**
* 선택색상
*/
private int colorSelect = 0xFFFF711C;
/**
* 일반색상
*/
private int colorNormal = 0x80FFFFFF;
/**
* click listener
*
* @since 1.0.0
*/
private OnPageClickListener listener;
/**
* constructor
*
* @since 1.0.0
* @param context
*/
public PageIndicator(Context context)
{
super(context);
initialize(context);
}
/**
* constructor
*
* @since 1.0.0
* @param context
* @param attrs
*/
public PageIndicator(Context context, AttributeSet attrs)
{
super(context, attrs);
initialize(context);
}
/**
* constructor
*
* @since 1.0.0
* @param context
* @param attrs
* @param defStyle
*/
public PageIndicator(Context context, AttributeSet attrs, int defStyle)
{
super(context, attrs, defStyle);
initialize(context);
}
/**
* initialize
*
* @since 1.0.0
* @param context
*/
private void initialize(Context context)
{
paint = new Paint();
paint.setAntiAlias(true);
radius = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 5, context.getResources().getDisplayMetrics());
}
/**
* set max page
*
* @since 1.0.0
* @param maxPage
*/
public void setMaxPage(int maxPage)
{
this.maxPage = maxPage;
invalidate();
}
/**
* set current page
*
* @since 1.0.0
* @param page
*/
public void setPage(int page)
{
this.page = page;
invalidate();
}
/**
* 색상 지정
*
* @since 1.0.0
* @param select
* @param normal
*/
public void setColor(int select, int normal)
{
this.colorSelect = select;
this.colorNormal = normal;
}
/*
* (non-Javadoc)
*
* @see android.view.View#onDraw(android.graphics.Canvas)
*/
@Override
protected void onDraw(Canvas canvas)
{
super.onDraw(canvas);
float sx = (getWidth() - maxPage * (radius * 2 + radius * 2)) / 2;
for (int i = 0; i < maxPage; i++)
{
if (i == page)
{
paint.setColor(colorSelect);
}
else
{
paint.setColor(colorNormal);
}
canvas.drawCircle(sx + radius + radius, getHeight() / 2, radius, paint);
sx += (radius * 2 + radius * 2);
}
}
/*
* (non-Javadoc)
*
* @see android.view.View#onTouchEvent(android.view.MotionEvent)
*/
public synchronized boolean onTouchEvent(MotionEvent event)
{
float sx = (getWidth() - maxPage * (radius * 2 + radius * 2)) / 2;
for (int i = 0; i < maxPage; i++)
{
if (event.getX() >= sx && event.getX() < sx + (radius * 2 + radius * 2))
{
page = i;
invalidate();
// if (event.getAction() == MotionEvent.ACTION_UP || event.getAction() == MotionEvent.ACTION_OUTSIDE || event.getAction() == MotionEvent.ACTION_CANCEL)
// {
if (listener != null)
{
listener.onPageClick(this, page);
}
// }
}
sx += (radius * 2 + radius * 2);
}
return true;
}
/**
*
* @since 1.0.0
* @param listener
*/
public void setOnPageClickListener(OnPageClickListener listener)
{
this.listener = listener;
}
/**
*
* <h3><b>OnPageClickListener</b></h3></br>
*
* @author aincc@barusoft.com
* @version 1.0.0
* @since 1.0.0
*/
public interface OnPageClickListener
{
public void onPageClick(PageIndicator v, int page);
}
}