FileDocCategorySizeDatePackage
AmPmCirclesView.javaAPI DocAndroid 5.1 API7527Thu Mar 12 22:22:50 GMT 2015com.android.datetimepicker.time

AmPmCirclesView

public class AmPmCirclesView extends android.view.View
Draw the two smaller AM and PM circles next to where the larger circle will be.

Fields Summary
private static final String
TAG
private static final int
SELECTED_ALPHA
private static final int
SELECTED_ALPHA_THEME_DARK
private final android.graphics.Paint
mPaint
private int
mSelectedAlpha
private int
mUnselectedColor
private int
mAmPmTextColor
private int
mSelectedColor
private float
mCircleRadiusMultiplier
private float
mAmPmCircleRadiusMultiplier
private String
mAmText
private String
mPmText
private boolean
mIsInitialized
private static final int
AM
private static final int
PM
private boolean
mDrawValuesReady
private int
mAmPmCircleRadius
private int
mAmXCenter
private int
mPmXCenter
private int
mAmPmYCenter
private int
mAmOrPm
private int
mAmOrPmPressed
Constructors Summary
public AmPmCirclesView(android.content.Context context)


       
        super(context);
        mIsInitialized = false;
    
Methods Summary
public intgetIsTouchingAmOrPm(float xCoord, float yCoord)
Calculate whether the coordinates are touching the AM or PM circle.

        if (!mDrawValuesReady) {
            return -1;
        }

        int squaredYDistance = (int) ((yCoord - mAmPmYCenter)*(yCoord - mAmPmYCenter));

        int distanceToAmCenter =
                (int) Math.sqrt((xCoord - mAmXCenter)*(xCoord - mAmXCenter) + squaredYDistance);
        if (distanceToAmCenter <= mAmPmCircleRadius) {
            return AM;
        }

        int distanceToPmCenter =
                (int) Math.sqrt((xCoord - mPmXCenter)*(xCoord - mPmXCenter) + squaredYDistance);
        if (distanceToPmCenter <= mAmPmCircleRadius) {
            return PM;
        }

        // Neither was close enough.
        return -1;
    
public voidinitialize(android.content.Context context, int amOrPm)

        if (mIsInitialized) {
            Log.e(TAG, "AmPmCirclesView may only be initialized once.");
            return;
        }

        Resources res = context.getResources();
        mUnselectedColor = res.getColor(R.color.white);
        mSelectedColor = res.getColor(R.color.blue);
        mAmPmTextColor = res.getColor(R.color.ampm_text_color);
        mSelectedAlpha = SELECTED_ALPHA;
        String typefaceFamily = res.getString(R.string.sans_serif);
        Typeface tf = Typeface.create(typefaceFamily, Typeface.NORMAL);
        mPaint.setTypeface(tf);
        mPaint.setAntiAlias(true);
        mPaint.setTextAlign(Align.CENTER);

        mCircleRadiusMultiplier =
                Float.parseFloat(res.getString(R.string.circle_radius_multiplier));
        mAmPmCircleRadiusMultiplier =
                Float.parseFloat(res.getString(R.string.ampm_circle_radius_multiplier));
        String[] amPmTexts = new DateFormatSymbols().getAmPmStrings();
        mAmText = amPmTexts[0];
        mPmText = amPmTexts[1];

        setAmOrPm(amOrPm);
        mAmOrPmPressed = -1;

        mIsInitialized = true;
    
public voidonDraw(android.graphics.Canvas canvas)

        int viewWidth = getWidth();
        if (viewWidth == 0 || !mIsInitialized) {
            return;
        }

        if (!mDrawValuesReady) {
            int layoutXCenter = getWidth() / 2;
            int layoutYCenter = getHeight() / 2;
            int circleRadius =
                    (int) (Math.min(layoutXCenter, layoutYCenter) * mCircleRadiusMultiplier);
            mAmPmCircleRadius = (int) (circleRadius * mAmPmCircleRadiusMultiplier);
            int textSize = mAmPmCircleRadius * 3 / 4;
            mPaint.setTextSize(textSize);

            // Line up the vertical center of the AM/PM circles with the bottom of the main circle.
            mAmPmYCenter = layoutYCenter - mAmPmCircleRadius / 2 + circleRadius;
            // Line up the horizontal edges of the AM/PM circles with the horizontal edges
            // of the main circle.
            mAmXCenter = layoutXCenter - circleRadius + mAmPmCircleRadius;
            mPmXCenter = layoutXCenter + circleRadius - mAmPmCircleRadius;

            mDrawValuesReady = true;
        }

        // We'll need to draw either a lighter blue (for selection), a darker blue (for touching)
        // or white (for not selected).
        int amColor = mUnselectedColor;
        int amAlpha = 255;
        int pmColor = mUnselectedColor;
        int pmAlpha = 255;
        if (mAmOrPm == AM) {
            amColor = mSelectedColor;
            amAlpha = mSelectedAlpha;
        } else if (mAmOrPm == PM) {
            pmColor = mSelectedColor;
            pmAlpha = mSelectedAlpha;
        }
        if (mAmOrPmPressed == AM) {
            amColor = mSelectedColor;
            amAlpha = mSelectedAlpha;
        } else if (mAmOrPmPressed == PM) {
            pmColor = mSelectedColor;
            pmAlpha = mSelectedAlpha;
        }

        // Draw the two circles.
        mPaint.setColor(amColor);
        mPaint.setAlpha(amAlpha);
        canvas.drawCircle(mAmXCenter, mAmPmYCenter, mAmPmCircleRadius, mPaint);
        mPaint.setColor(pmColor);
        mPaint.setAlpha(pmAlpha);
        canvas.drawCircle(mPmXCenter, mAmPmYCenter, mAmPmCircleRadius, mPaint);

        // Draw the AM/PM texts on top.
        mPaint.setColor(mAmPmTextColor);
        int textYCenter = mAmPmYCenter - (int) (mPaint.descent() + mPaint.ascent()) / 2;
        canvas.drawText(mAmText, mAmXCenter, textYCenter, mPaint);
        canvas.drawText(mPmText, mPmXCenter, textYCenter, mPaint);
    
public voidsetAmOrPm(int amOrPm)

        mAmOrPm = amOrPm;
    
public voidsetAmOrPmPressed(int amOrPmPressed)

        mAmOrPmPressed = amOrPmPressed;
    
voidsetTheme(android.content.Context context, boolean themeDark)

        Resources res = context.getResources();
        if (themeDark) {
            mUnselectedColor = res.getColor(R.color.dark_gray);
            mSelectedColor = res.getColor(R.color.red);
            mAmPmTextColor = res.getColor(R.color.white);
            mSelectedAlpha = SELECTED_ALPHA_THEME_DARK;
        } else {
            mUnselectedColor = res.getColor(R.color.white);
            mSelectedColor = res.getColor(R.color.blue);
            mAmPmTextColor = res.getColor(R.color.ampm_text_color);
            mSelectedAlpha = SELECTED_ALPHA;
        }