android 文字混排对齐,[Android]TextView图文混排对齐

package com.chargerlink.app.ui.charging.panel.comment;

import android.content.Context;

import android.graphics.Canvas;

import android.graphics.Paint;

import android.graphics.Rect;

import android.graphics.drawable.Drawable;

import android.text.style.ImageSpan;

import java.lang.ref.WeakReference;

/**

* 图片垂直居中显示

* Created by liuguoquan on 16/9/5.

*/

public class CenterImageSpan extends ImageSpan {

private WeakReference mDrawableRef;

public CenterImageSpan(Context context, int resourceId, int verticalAlignment) {

super(context, resourceId, verticalAlignment);

}

@Override public int getSize(Paint paint, CharSequence text, int start, int end,

Paint.FontMetricsInt fontMetricsInt) {

Drawable drawable = getDrawable();

Rect rect = drawable.getBounds();

if (fontMetricsInt != null) {

Paint.FontMetricsInt fmPaint = paint.getFontMetricsInt();

int fontHeight = fmPaint.descent - fmPaint.ascent;

int drHeight = rect.bottom - rect.top;

int centerY = fmPaint.ascent + fontHeight / 2;

fontMetricsInt.ascent = centerY - drHeight / 2;

fontMetricsInt.top = fontMetricsInt.ascent;

fontMetricsInt.bottom = centerY + drHeight / 2;

fontMetricsInt.descent = fontMetricsInt.bottom;

}

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 drawable = getCachedDrawable();

canvas.save();

Paint.FontMetricsInt fmPaint = paint.getFontMetricsInt();

int fontHeight = fmPaint.descent - fmPaint.ascent;

int centerY = y + fmPaint.descent - fontHeight / 2;

int transY = centerY - (drawable.getBounds().bottom - drawable.getBounds().top) / 2;

canvas.translate(x, transY);

drawable.draw(canvas);

canvas.restore();

}

private Drawable getCachedDrawable() {

WeakReference wr = mDrawableRef;

Drawable d = null;

if (wr != null) {

d = wr.get();

}

if (d == null) {

d = getDrawable();

mDrawableRef = new WeakReference<>(d);

}

return d;

}

}

// 评论内容,设置标签、链接跳转

Spannable content = new SpannableStringBuilder("占位 " + comment.getContent());

CenterImageSpan span = new CenterImageSpan(mActivity,R.drawable.ic_btn_ask,ImageSpan.ALIGN_BASELINE);

// 用ImageSpan替换文本

content.setSpan(span, 0, 2, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);

holder.mAskText.setText(content);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值