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); } }