/** * galaxy inc. * meetup client for android */ package com.galaxy.meetup.client.android.ui.view; import android.content.Context; import android.content.res.Resources; import android.database.Cursor; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.RectF; import android.text.TextPaint; import android.util.AttributeSet; import com.galaxy.meetup.client.android.R; import com.galaxy.meetup.client.android.common.Recyclable; import com.galaxy.meetup.client.util.TextPaintUtils; /** * * @author sihai * */ public class StreamOneUpCommentCountView extends OneUpBaseView implements Recyclable { private static Paint sBackgroundPaint; private static int sCountMarginLeft; private static TextPaint sCountPaint; private static Paint sDividerPaint; private static int sDividerWidth; private static int sMarginLeft; private static int sMarginRight; private boolean mContentDescriptionDirty; private String mCount; private PositionedStaticLayout mCountLayout; private RectF mDivider; public StreamOneUpCommentCountView(Context context) { super(context); mDivider = new RectF(); mContentDescriptionDirty = true; if(sBackgroundPaint == null) { Resources resources = getContext().getResources(); sMarginLeft = resources.getDimensionPixelOffset(R.dimen.stream_one_up_margin_left); sMarginRight = resources.getDimensionPixelOffset(R.dimen.stream_one_up_margin_right); sCountMarginLeft = resources.getDimensionPixelOffset(R.dimen.stream_one_up_comment_count_margin_left); sDividerWidth = resources.getDimensionPixelOffset(R.dimen.stream_one_up_comment_count_divider_width); TextPaint textpaint = new TextPaint(); sCountPaint = textpaint; textpaint.setAntiAlias(true); sCountPaint.setColor(resources.getColor(R.color.stream_one_up_comment_count)); sCountPaint.setTextSize(resources.getDimension(R.dimen.stream_one_up_comment_count_text_size)); TextPaintUtils.registerTextPaint(sCountPaint, R.dimen.stream_one_up_comment_count_text_size); Paint paint = new Paint(); sBackgroundPaint = paint; paint.setColor(resources.getColor(R.color.stream_one_up_list_background)); sBackgroundPaint.setStyle(android.graphics.Paint.Style.FILL); Paint paint1 = new Paint(); sDividerPaint = paint1; paint1.setColor(resources.getColor(R.color.stream_one_up_comment_count_divider)); sDividerPaint.setStyle(android.graphics.Paint.Style.STROKE); sDividerPaint.setStrokeWidth(sDividerWidth); } } public StreamOneUpCommentCountView(Context context, AttributeSet attributeset) { super(context, attributeset); mDivider = new RectF(); mContentDescriptionDirty = true; if(sBackgroundPaint == null) { Resources resources = getContext().getResources(); sMarginLeft = resources.getDimensionPixelOffset(R.dimen.stream_one_up_margin_left); sMarginRight = resources.getDimensionPixelOffset(R.dimen.stream_one_up_margin_right); sCountMarginLeft = resources.getDimensionPixelOffset(R.dimen.stream_one_up_comment_count_margin_left); sDividerWidth = resources.getDimensionPixelOffset(R.dimen.stream_one_up_comment_count_divider_width); TextPaint textpaint = new TextPaint(); sCountPaint = textpaint; textpaint.setAntiAlias(true); sCountPaint.setColor(resources.getColor(R.color.stream_one_up_comment_count)); sCountPaint.setTextSize(resources.getDimension(R.dimen.stream_one_up_comment_count_text_size)); TextPaintUtils.registerTextPaint(sCountPaint, R.dimen.stream_one_up_comment_count_text_size); Paint paint = new Paint(); sBackgroundPaint = paint; paint.setColor(resources.getColor(R.color.stream_one_up_list_background)); sBackgroundPaint.setStyle(android.graphics.Paint.Style.FILL); Paint paint1 = new Paint(); sDividerPaint = paint1; paint1.setColor(resources.getColor(R.color.stream_one_up_comment_count_divider)); sDividerPaint.setStyle(android.graphics.Paint.Style.STROKE); sDividerPaint.setStrokeWidth(sDividerWidth); } } public StreamOneUpCommentCountView(Context context, AttributeSet attributeset, int i) { super(context, attributeset, i); mDivider = new RectF(); mContentDescriptionDirty = true; if(sBackgroundPaint == null) { Resources resources = getContext().getResources(); sMarginLeft = resources.getDimensionPixelOffset(R.dimen.stream_one_up_margin_left); sMarginRight = resources.getDimensionPixelOffset(R.dimen.stream_one_up_margin_right); sCountMarginLeft = resources.getDimensionPixelOffset(R.dimen.stream_one_up_comment_count_margin_left); sDividerWidth = resources.getDimensionPixelOffset(R.dimen.stream_one_up_comment_count_divider_width); TextPaint textpaint = new TextPaint(); sCountPaint = textpaint; textpaint.setAntiAlias(true); sCountPaint.setColor(resources.getColor(R.color.stream_one_up_comment_count)); sCountPaint.setTextSize(resources.getDimension(R.dimen.stream_one_up_comment_count_text_size)); TextPaintUtils.registerTextPaint(sCountPaint, R.dimen.stream_one_up_comment_count_text_size); Paint paint = new Paint(); sBackgroundPaint = paint; paint.setColor(resources.getColor(R.color.stream_one_up_list_background)); sBackgroundPaint.setStyle(android.graphics.Paint.Style.FILL); Paint paint1 = new Paint(); sDividerPaint = paint1; paint1.setColor(resources.getColor(R.color.stream_one_up_comment_count_divider)); sDividerPaint.setStyle(android.graphics.Paint.Style.STROKE); sDividerPaint.setStrokeWidth(sDividerWidth); } } public final void bind(Cursor cursor) { setCount(cursor.getInt(2)); invalidate(); requestLayout(); } public void invalidate() { super.invalidate(); if(mContentDescriptionDirty) { setContentDescription(mCount); mContentDescriptionDirty = false; } } protected void onDraw(Canvas canvas) { super.onDraw(canvas); int i = getWidth(); int j = getHeight(); canvas.drawRect(0.0F, 0.0F, i, j, sBackgroundPaint); if(mCountLayout != null) { int k = mCountLayout.getLeft(); int l = mCountLayout.getTop(); canvas.translate(k, l); mCountLayout.draw(canvas); canvas.translate(-k, -l); canvas.drawLine(mDivider.left, mDivider.top, mDivider.right, mDivider.bottom, sDividerPaint); } } protected void onMeasure(int i, int j) { super.onMeasure(i, j); int k = getPaddingLeft() + sMarginLeft; int l = getPaddingTop(); int i1 = getMeasuredWidth(); int j1 = i1 - k - sMarginRight; int k1 = (int)sCountPaint.measureText(mCount); mCountLayout = new PositionedStaticLayout(mCount, sCountPaint, k1, android.text.Layout.Alignment.ALIGN_NORMAL, 1.0F, 0.0F, false); mCountLayout.setPosition(k, l); android.graphics.Paint.FontMetricsInt fontmetricsint = sCountPaint.getFontMetricsInt(); int l1 = k + (k1 + sCountMarginLeft); int i2 = l + (fontmetricsint.descent - fontmetricsint.ascent - sDividerWidth) / 2; mDivider.set(l1, i2, (k + j1) - sCountMarginLeft, i2); setMeasuredDimension(i1, l + mCountLayout.getHeight() + getPaddingBottom()); if(mOnMeasuredListener != null) mOnMeasuredListener.onMeasured(this); } public void onRecycle() { mCountLayout = null; mCount = null; } public void setCount(int i) { Resources resources = getContext().getResources(); int j = R.plurals.stream_one_up_comment_count; Object aobj[] = new Object[1]; aobj[0] = Integer.valueOf(i); mCount = resources.getQuantityString(j, i, aobj).toUpperCase(resources.getConfiguration().locale); mCountLayout = null; mContentDescriptionDirty = true; } }