diff --git a/src/org/thoughtcrime/securesms/components/emoji/EmojiSpan.java b/src/org/thoughtcrime/securesms/components/emoji/EmojiSpan.java index 5a15d78f3f..d784165a51 100644 --- a/src/org/thoughtcrime/securesms/components/emoji/EmojiSpan.java +++ b/src/org/thoughtcrime/securesms/components/emoji/EmojiSpan.java @@ -1,5 +1,6 @@ package org.thoughtcrime.securesms.components.emoji; +import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.Paint.FontMetricsInt; import android.graphics.drawable.Drawable; @@ -9,6 +10,9 @@ import android.widget.TextView; import org.thoughtcrime.securesms.R; public class EmojiSpan extends AnimatingImageSpan { + + private final float SHIFT_FACTOR = 1.5f; + private final int size; private final FontMetricsInt fm; @@ -20,17 +24,25 @@ public class EmojiSpan extends AnimatingImageSpan { getDrawable().setBounds(0, 0, size, size); } - @Override public int getSize(Paint paint, CharSequence text, int start, int end, - FontMetricsInt fm) - { + @Override + public int getSize(Paint paint, CharSequence text, int start, int end, FontMetricsInt fm) { if (fm != null && this.fm != null) { fm.ascent = this.fm.ascent; fm.descent = this.fm.descent; fm.top = this.fm.top; fm.bottom = this.fm.bottom; + fm.leading = this.fm.leading; return size; } else { return super.getSize(paint, text, start, end, fm); } } + + @Override + public void draw(Canvas canvas, CharSequence text, int start, int end, float x, int top, int y, int bottom, Paint paint) { + int height = bottom - top; + int centeringMargin = (height - size) / 2; + int adjustedMargin = (int) (centeringMargin * SHIFT_FACTOR); + super.draw(canvas, text, start, end, x, top, y, bottom - adjustedMargin, paint); + } }