package com.quran.labs.androidquran.widgets; import android.content.Context; import android.content.res.Resources; import android.graphics.Canvas; import android.graphics.ColorFilter; import android.graphics.Paint; import android.graphics.RectF; import android.graphics.drawable.Drawable; import android.support.v4.content.ContextCompat; import android.text.TextPaint; import android.text.TextUtils; import com.quran.labs.androidquran.R; public class JuzView extends Drawable { public static final int TYPE_JUZ = 1; public static final int TYPE_QUARTER = 2; public static final int TYPE_HALF = 3; public static final int TYPE_THREE_QUARTERS = 4; private int mRadius; private int mCircleY; private int mPercentage; private float mTextOffset; private String mOverlayText; private RectF mCircleRect; private Paint mCirclePaint; private TextPaint mOverlayTextPaint; private Paint mCircleBackgroundPaint; public JuzView(Context context, int type, String overlayText) { final Resources resources = context.getResources(); final int circleColor = ContextCompat.getColor(context, R.color.accent_color); final int circleBackground = ContextCompat.getColor(context, R.color.accent_color_dark); mCirclePaint = new Paint(); mCirclePaint.setStyle(Paint.Style.FILL); mCirclePaint.setColor(circleColor); mCirclePaint.setAntiAlias(true); mCircleBackgroundPaint = new Paint(); mCircleBackgroundPaint.setStyle(Paint.Style.FILL); mCircleBackgroundPaint.setColor(circleBackground); mCircleBackgroundPaint.setAntiAlias(true); mOverlayText = overlayText; if (!TextUtils.isEmpty(mOverlayText)) { final int textColor = ContextCompat.getColor(context, R.color.header_background); final int textSize = resources.getDimensionPixelSize(R.dimen.juz_overlay_text_size); mOverlayTextPaint = new TextPaint(); mOverlayTextPaint.setAntiAlias(true); mOverlayTextPaint.setColor(textColor); mOverlayTextPaint.setTextSize(textSize); mOverlayTextPaint.setTextAlign(Paint.Align.CENTER); final float textHeight = mOverlayTextPaint.descent() - mOverlayTextPaint.ascent(); mTextOffset = (textHeight / 2) - mOverlayTextPaint.descent(); } final int percentage; switch (type) { case TYPE_JUZ: percentage = 100; break; case TYPE_THREE_QUARTERS: percentage = 75; break; case TYPE_HALF: percentage = 50; break; case TYPE_QUARTER: percentage = 25; break; default: percentage = 0; } mPercentage = percentage; } @Override public void setBounds(int left, int top, int right, int bottom) { super.setBounds(left, top, right, bottom); mRadius = (right - left) / 2; final int yOffset = ((bottom - top) - (2 * mRadius)) / 2; mCircleY = mRadius + yOffset; mCircleRect = new RectF(left, top + yOffset, right, top + yOffset + 2 * mRadius); } @Override public void draw(Canvas canvas) { canvas.drawCircle(mRadius, mCircleY, mRadius, mCircleBackgroundPaint); canvas.drawArc(mCircleRect, -90, (int) (3.6 * mPercentage), true, mCirclePaint); if (mOverlayTextPaint != null) { canvas.drawText(mOverlayText, mCircleRect.centerX(), mCircleRect.centerY() + mTextOffset, mOverlayTextPaint); } } @Override public void setAlpha(int alpha) { } @Override public void setColorFilter(ColorFilter cf) { } @Override public int getOpacity() { return 0; } }