package com.shaweibo.biu.widget; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.Paint.FontMetricsInt; import android.graphics.Rect; import android.graphics.drawable.Drawable; import android.net.Uri; import android.text.style.ImageSpan; public class StickerImageSpan extends ImageSpan { public StickerImageSpan(Drawable d) { super(d); // TODO Auto-generated constructor stub } public StickerImageSpan(Context context, Bitmap b, int verticalAlignment) { super(context, b, verticalAlignment); // TODO Auto-generated constructor stub } public StickerImageSpan(Context context, Bitmap b) { super(context, b); // TODO Auto-generated constructor stub } public StickerImageSpan(Context context, int resourceId, int verticalAlignment) { super(context, resourceId, verticalAlignment); // TODO Auto-generated constructor stub } public StickerImageSpan(Context context, int resourceId) { super(context, resourceId); // TODO Auto-generated constructor stub } public StickerImageSpan(Context context, Uri uri, int verticalAlignment) { super(context, uri, verticalAlignment); // TODO Auto-generated constructor stub } public StickerImageSpan(Context context, Uri uri) { super(context, uri); // TODO Auto-generated constructor stub } public StickerImageSpan(Drawable d, int verticalAlignment) { super(d, verticalAlignment); // TODO Auto-generated constructor stub } public StickerImageSpan(Drawable d, String source, int verticalAlignment) { super(d, source, verticalAlignment); // TODO Auto-generated constructor stub } public StickerImageSpan(Drawable d, String source) { super(d, source); // TODO Auto-generated constructor stub } public int getSize(Paint paint, CharSequence text, int start, int end, FontMetricsInt fm) { Drawable d = getDrawable(); Rect rect = d.getBounds(); if (fm != null) { FontMetricsInt fmPaint=paint.getFontMetricsInt(); int fontHeight = fmPaint.bottom - fmPaint.top; int drHeight=rect.bottom-rect.top; int top= drHeight/2 - fontHeight/4; int bottom=drHeight/2 + fontHeight/4; fm.ascent=-bottom; fm.top=-bottom; fm.bottom=top; fm.descent=top; } return rect.right; } @Override public void draw(Canvas canvas, CharSequence text, int start, int end, float x, int top, int y, int bottom, Paint paint) { Drawable b = getDrawable(); canvas.save(); int transY = 0; transY = ((bottom-top) - b.getBounds().bottom)/2+top; canvas.translate(x, transY); b.draw(canvas); canvas.restore(); } }