package com.mediamonks.googleflip.ui.paging; import android.content.Context; import android.graphics.Canvas; import android.graphics.Paint; import android.util.AttributeSet; import android.view.View; import com.mediamonks.googleflip.R; /** * View class for page indication */ public class PageIndicator extends View { private Paint _paintActive; private Paint _paintInactive; private int _numPages; private int _activePage; public PageIndicator(Context context) { super(context); setup(); } public PageIndicator(Context context, AttributeSet attrs) { super(context, attrs); setup(); } public PageIndicator(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); setup(); } private void setup() { _paintActive = new Paint(); _paintActive.setStyle(Paint.Style.FILL); _paintActive.setDither(true); _paintActive.setAntiAlias(true); _paintActive.setColor(getResources().getColor(R.color.white)); _paintInactive = new Paint(); _paintInactive.setStyle(Paint.Style.FILL); _paintActive.setAntiAlias(true); _paintInactive.setColor(getResources().getColor(R.color.white_30)); if (isInEditMode()) { _activePage = 0; _numPages = 3; } } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); final int leni = _numPages; int sizeActive = (int) getResources().getDimension(R.dimen.page_indicator_active_size); int sizeInactive = (int) getResources().getDimension(R.dimen.page_indicator_inactive_size); int dotSpacing = (int) getResources().getDimension(R.dimen.page_indicator_spacing); int y = getHeight() / 2; int spacing = dotSpacing + sizeInactive; int centerX = (canvas.getWidth() - leni * sizeInactive - sizeActive) / 2; int x; for (int i = 0; i < leni; ++i) { x = centerX + spacing * i; canvas.drawCircle(x, y, sizeInactive / 2, _paintInactive); if (i == _activePage) { canvas.drawCircle(x, y, sizeActive / 2, _paintActive); } } } public void setNumPages(int numPages) { _numPages = numPages; postInvalidate(); } public void setActivePage(int activePage) { _activePage = activePage; postInvalidate(); } }