Last active
June 14, 2018 07:39
-
-
Save rajsuvariya/ec7c82480c5d485d786c0b053bd56f9e to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.bslamc.ifa.customComponent.badgeDrawable; | |
/** | |
* Created by rajsuvariya on 17/8/17. | |
*/ | |
import android.content.Context; | |
import android.graphics.Canvas; | |
import android.graphics.Color; | |
import android.graphics.ColorFilter; | |
import android.graphics.Paint; | |
import android.graphics.PixelFormat; | |
import android.graphics.Rect; | |
import android.graphics.Typeface; | |
import android.graphics.drawable.Drawable; | |
import android.support.v4.content.ContextCompat; | |
import com.bslamc.ifa.R; | |
public class CountDrawable extends Drawable { | |
private Paint mBadgePaint; | |
private Paint mTextPaint; | |
private Rect mTxtRect = new Rect(); | |
private String mCount = ""; | |
private boolean mWillDraw; | |
public CountDrawable(Context context) { | |
float mTextSize = context.getResources().getDimension(R.dimen.badge_count_textsize); | |
mBadgePaint = new Paint(); | |
mBadgePaint.setColor(ContextCompat.getColor(context.getApplicationContext(), R.color.background_color)); | |
mBadgePaint.setAntiAlias(true); | |
mBadgePaint.setStyle(Paint.Style.FILL); | |
mTextPaint = new Paint(); | |
mTextPaint.setColor(Color.WHITE); | |
mTextPaint.setTypeface(Typeface.DEFAULT); | |
mTextPaint.setTextSize(mTextSize); | |
mTextPaint.setAntiAlias(true); | |
mTextPaint.setTextAlign(Paint.Align.CENTER); | |
} | |
@Override | |
public void draw(Canvas canvas) { | |
if (!mWillDraw) { | |
return; | |
} | |
Rect bounds = getBounds(); | |
float width = bounds.right - bounds.left; | |
float height = bounds.bottom - bounds.top; | |
// Position the badge in the top-right quadrant of the icon. | |
/*Using Math.max rather than Math.min */ | |
float radius = ((Math.max(width, height) / 2)) / 2; | |
float centerX = (width - radius - 1) +5; | |
float centerY = radius -5; | |
if(mCount.length() <= 2){ | |
// Draw badge circle. | |
canvas.drawCircle(centerX, centerY, (int)(radius+5.5), mBadgePaint); | |
} | |
else{ | |
canvas.drawCircle(centerX, centerY, (int)(radius+6.5), mBadgePaint); | |
} | |
// Draw badge count text inside the circle. | |
mTextPaint.getTextBounds(mCount, 0, mCount.length(), mTxtRect); | |
float textHeight = mTxtRect.bottom - mTxtRect.top; | |
float textY = centerY + (textHeight / 2f); | |
if(mCount.length() > 2) | |
canvas.drawText("99+", centerX, textY, mTextPaint); | |
else | |
canvas.drawText(mCount, centerX, textY, mTextPaint); | |
} | |
/* | |
Sets the count (i.e notifications) to display. | |
*/ | |
public void setCount(String count) { | |
mCount = count; | |
// Only draw a badge if there are notifications. | |
mWillDraw = !count.equalsIgnoreCase("0"); | |
invalidateSelf(); | |
} | |
@Override | |
public void setAlpha(int alpha) { | |
// do nothing | |
} | |
@Override | |
public void setColorFilter(ColorFilter cf) { | |
// do nothing | |
} | |
@Override | |
public int getOpacity() { | |
return PixelFormat.UNKNOWN; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
getBounds() what to implement in this method ?