Last active
August 22, 2018 11:08
-
-
Save dineshmm23/80ddb38869902312c59543ded276a944 to your computer and use it in GitHub Desktop.
Measure height of multiline text To center text vertically we need to know text height. Instantiate StaticLayout with text width according to your needs, for us it is simple the width of Bitmap/Canvas minus 16dp padding. The getHeight() then returns height of text. Positioning text on Canvas There are four simple steps to position text on Canvas…
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
public Bitmap drawMultilineTextToBitmap(Context gContext, | |
int gResId, | |
String gText) { | |
// prepare canvas | |
Resources resources = gContext.getResources(); | |
float scale = resources.getDisplayMetrics().density; | |
Bitmap bitmap = BitmapFactory.decodeResource(resources, gResId); | |
android.graphics.Bitmap.Config bitmapConfig = bitmap.getConfig(); | |
// set default bitmap config if none | |
if(bitmapConfig == null) { | |
bitmapConfig = android.graphics.Bitmap.Config.ARGB_8888; | |
} | |
// resource bitmaps are imutable, | |
// so we need to convert it to mutable one | |
bitmap = bitmap.copy(bitmapConfig, true); | |
Canvas canvas = new Canvas(bitmap); | |
// new antialiased Paint | |
TextPaint paint=new TextPaint(Paint.ANTI_ALIAS_FLAG); | |
// text color - #3D3D3D | |
paint.setColor(Color.rgb(61, 61, 61)); | |
// text size in pixels | |
paint.setTextSize((int) (14 * scale)); | |
// text shadow | |
paint.setShadowLayer(1f, 0f, 1f, Color.WHITE); | |
// set text width to canvas width minus 16dp padding | |
int textWidth = canvas.getWidth() - (int) (16 * scale); | |
// init StaticLayout for text | |
StaticLayout textLayout = new StaticLayout( | |
gText, paint, textWidth, Layout.Alignment.ALIGN_CENTER, 1.0f, 0.0f, false); | |
// get height of multiline text | |
int textHeight = textLayout.getHeight(); | |
// get position of text's top left corner | |
float x = (bitmap.getWidth() - textWidth)/2; | |
float y = (bitmap.getHeight() - textHeight)/2; | |
// draw text to the Canvas center | |
canvas.save(); | |
canvas.translate(x, y); | |
textLayout.draw(canvas); | |
canvas.restore(); | |
return bitmap; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment