当我在android中使用BackgroundImageSpan时,在一行的末尾,它没有显示出来

当我在android中使用BackgroundImageSpan时,在一行的末尾,它没有显示出来,android,html,textview,Android,Html,Textview,当我在android中使用BackgroundImageSpan时,但在一行的末尾,它不会显示,就像图片中的红色下划线一样,通常应显示背景图像: public class BackgroundImageSpan extends ReplacementSpan { private static final String TAG = "BackgroundImageSpan"; private Drawable mDrawable; private int mImageId; private int

当我在android中使用BackgroundImageSpan时,但在一行的末尾,它不会显示,就像图片中的红色下划线一样,通常应显示背景图像:

public class BackgroundImageSpan extends ReplacementSpan {
private static final String TAG = "BackgroundImageSpan";
private Drawable mDrawable;
private int mImageId;
private int mTextColor;
private int mWidth = -1;

/**
 * new BackgroundImageSpan use resource id and Drawable
 *
 * @param id       the drawable resource id
 * @param drawable Drawable related to the id
 * @internal
 * @hide
 */
public BackgroundImageSpan(int id, Drawable drawable, int textColor) {
    mImageId = id;
    mDrawable = drawable;
    mTextColor = textColor;
}

public BackgroundImageSpan(int id, Drawable drawable) {
    mImageId = id;
    mDrawable = drawable;
}

/**
 * @hide
 * @internal
 */
public BackgroundImageSpan(Parcel src) {
    mImageId = src.readInt();
}

/**
 * @hide
 * @internal
 */
public void draw(Canvas canvas, int width, float x, int top, int y, int bottom, Paint paint) {
    if (mDrawable == null) {//if no backgroundImage just don't do any draw
        Log.e(TAG, "mDrawable is null draw()");
        return;
    }
    Drawable drawable = mDrawable;
    canvas.save();
    canvas.translate(x, top); // translate to the left top point
    mDrawable.setBounds(0, -4, width, bottom - top - 12);
    drawable.draw(canvas);
    canvas.restore();
}

@Override
public void updateDrawState(TextPaint tp) {
}

/**
 * return a special type identifier for this span class
 *
 * @hide
 * @internal
 * @Override
 */
public int getSpanTypeId() {
    return 0;
}

/**
 * describe the kinds of special objects contained in this Parcelable's marshalled representation
 *
 * @hide
 * @internal
 * @Override
 */
public int describeContents() {
    return 0;
}

/**
 * flatten this object in to a Parcel
 *
 * @hide
 * @internal
 * @Override
 */
public void writeToParcel(Parcel dest, int flags) {
    dest.writeInt(mImageId);
}

/**
 * @hide
 * @internal
 */
public void convertToDrawable(Context context) {
    if (mDrawable == null) {
        mDrawable = context.getResources().getDrawable(mImageId);
    }
}

/**
 * convert a style text that contain BackgroundImageSpan, Parcek only pass resource id,
 * after Parcel, we need to convert resource id to Drawable.
 *
 * @hide
 * @internal
 */
public static void convert(CharSequence text, Context context) {
    if (!(text instanceof SpannableStringBuilder)) {
        return;
    }
    SpannableStringBuilder builder = (SpannableStringBuilder) text;
    BackgroundImageSpan[] spans = builder.getSpans(0, text.length(), BackgroundImageSpan.class);
    if (spans == null || spans.length == 0) {
        return;
    }
    for (int i = 0; i < spans.length; i++) {
        spans[i].convertToDrawable(context);
    }
}

/**
 * draw the span
 *
 * @hide
 * @internal
 * @Override
 */
public void draw(Canvas canvas, CharSequence text, int start, int end, float x, int top, int y, int bottom, Paint paint) {
    // draw image
    draw(canvas, mWidth, x, top, y, bottom, paint);
    // draw text
    // the paint is already updated
    if (mTextColor != 0) {
        paint.setColor(mTextColor);
    }
    canvas.drawText(text, start, end, x, y, paint);
}

/**
 * get size of the span
 *
 * @hide
 * @internal
 * @Override
 */
public int getSize(Paint paint, CharSequence text, int start, int end,
                   Paint.FontMetricsInt fm) {
    float size = paint.measureText(text, start, end);
    if (fm != null && paint != null) {
        paint.getFontMetricsInt(fm);
    }
    mWidth = (int) size;
    return mWidth;
}
}
public类BackgroundImageSpan扩展了ReplacementSpan{
私有静态最终字符串标记=“BackgroundImageSpan”;
私人可提取;
私有int-mImageId;
私有int-mTextColor;
私有整数mWidth=-1;
/**
*新BackgroundImageSpan使用资源id和可绘制
*
*@param id可提取资源id
*@param drawable与id相关
*@内部
*@隐藏
*/
public BackgroundImageSpan(int-id、Drawable-Drawable、int-textColor){
mImageId=id;
mDrawable=可绘制;
mTextColor=textColor;
}
公共背景图像跨度(内部id,可绘制){
mImageId=id;
mDrawable=可绘制;
}
/**
*@隐藏
*@内部
*/
公共背景图像跨度(src地块){
mImageId=src.readInt();
}
/**
*@隐藏
*@内部
*/
公共空白绘制(画布、整幅宽度、浮动x、整幅顶部、整幅y、整幅底部、绘制){
如果(mDrawable==null){//如果没有背景图像,就不要进行任何绘制
Log.e(标记“mDrawable是null draw()”);
返回;
}
可绘制可绘制=可绘制;
canvas.save();
canvas.translate(x,top);//平移到左顶点
可绘制。立根(0,-4,宽度,底部-顶部-12);
可绘制。绘制(画布);
canvas.restore();
}
@凌驾
public void updateDrawState(TextPaint){
}
/**
*返回此跨度类的特殊类型标识符
*
*@隐藏
*@内部
*@覆盖
*/
public int getSpanTypeId(){
返回0;
}
/**
*描述此包裹的编组表示中包含的特殊对象的种类
*
*@隐藏
*@内部
*@覆盖
*/
公共int描述内容(){
返回0;
}
/**
*将此对象展平为地块
*
*@隐藏
*@内部
*@覆盖
*/
公共无效写入包裹(包裹目的地,内部标志){
目标写入(mImageId);
}
/**
*@隐藏
*@内部
*/
公共void可转换为可绘制(上下文){
if(mDrawable==null){
mDrawable=context.getResources().getDrawable(mImageId);
}
}
/**
*转换包含BackgroundImageSpan、Parcek only pass资源id、,
*包裹之后,我们需要将资源id转换为可提取。
*
*@隐藏
*@内部
*/
公共静态void转换(字符序列文本、上下文){
if(!(SpannableStringBuilder的文本实例)){
返回;
}
SpannableStringBuilder=(SpannableStringBuilder)文本;
BackgroundImageSpan[]span=builder.getspan(0,text.length(),BackgroundImageSpan.class);
如果(spans==null | | spans.length==0){
返回;
}
对于(int i=0;i

请帮帮我!!!请帮帮我