package com.quran.labs.androidquran.widgets; import com.quran.labs.androidquran.R; import android.content.Context; import android.content.res.Resources; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Rect; import android.graphics.drawable.Drawable; import android.support.annotation.NonNull; import android.text.TextPaint; import android.util.AttributeSet; import android.widget.ImageView; public class RepeatButton extends ImageView { @NonNull private String mText; @NonNull private TextPaint mPaint; private boolean mCanDraw; private int mViewWidth; private int mViewHeight; private int mTextXPosition; private int mTextYPosition; private int mTextYPadding; public RepeatButton(Context context) { this(context, null); } public RepeatButton(Context context, AttributeSet attrs) { this(context, attrs, 0); } public RepeatButton(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); mPaint = new TextPaint(Paint.ANTI_ALIAS_FLAG); mPaint.setColor(Color.WHITE); final Resources resources = context.getResources(); mPaint.setTextSize(resources.getDimensionPixelSize(R.dimen.repeat_superscript_text_size)); mTextYPadding = resources.getDimensionPixelSize(R.dimen.repeat_text_y_padding); mText = ""; } public void setText(@NonNull String text) { mText = text; updateCoordinates(); invalidate(); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); mViewWidth = getMeasuredWidth(); mViewHeight = getMeasuredHeight(); updateCoordinates(); } private void updateCoordinates() { mCanDraw = false; final Drawable drawable = getDrawable(); if (drawable != null) { final Rect bounds = drawable.getBounds(); if (bounds != null && bounds.width() > 0) { mTextXPosition = mViewWidth - (mViewWidth - bounds.width()) / 2; mTextYPosition = mTextYPadding + (mViewHeight - bounds.height()) / 2; mCanDraw = true; } } } @Override protected void onDraw(@NonNull Canvas canvas) { super.onDraw(canvas); final int length = mText.length(); if (mCanDraw && length > 0) { canvas.drawText(mText, 0, length, mTextXPosition, mTextYPosition, mPaint); } } }