用ImageSpan做@别人的标签:
ImageSpan imageSpan = new ImageSpan(mView.getContext(), imgBitmap);
CharSequence source = "[at]" + replyData.getName() + "/" + replyData.getOpenid() + "[/at]";
SpannableString spannableString = new SpannableString(source);
spannableString.setSpan(imageSpan, 0, (source).length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
Editable edit_text = mView.getReplyEditText().getEditableText();
edit_text.insert(0, spannableString);
changeStringToBitmap方法:
//文字属性
TextPaint paint = new TextPaint(Paint.ANTI_ALIAS_FLAG);
//字体大小
int fontSize = DisplayUtils.sp2px(mView.getContext(), 12);
paint.setTextSize(fontSize);
//字体颜色
paint.setColor(Color.WHITE);
paint.setTextAlign(Paint.Align.CENTER);
//获取文字区域大小
Rect rect = new Rect();
paint.getTextBounds(data, 0, data.length(), rect);
int fontWidth = rect.width();
Paint.FontMetrics fontMetrics = paint.getFontMetrics();
float fontBaseHeight = fontMetrics.bottom - fontMetrics.top;
float textBaseY = fontBaseHeight - fontMetrics.bottom;
//画布大小
int canvasWidth = Double.valueOf(Math.ceil(fontWidth)).intValue();
int canvasH = Double.valueOf(Math.ceil(fontBaseHeight)).intValue();
Bitmap bitmap = Bitmap.createBitmap(canvasWidth, canvasH, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
Paint paintCanvas = new Paint();
paintCanvas.setColor(Color.BLACK);
canvas.drawColor(Color.GRAY);
//文字位置
canvas.drawText(data, canvasWidth / (float) 2.0, textBaseY, paint);
canvas.save();//保存
canvas.restore();
return bitmap;
控制@标签只能放在text的最前,控制光标只能在@标签后面:
需要监控光标位置:
public class AtContentEditText extends android.support.v7.widget.AppCompatEditText {
public interface onSelectionChangedListener {
void onCursorChanged(int selStart, int selEnd);
}
private onSelectionChangedListener mSelectionChangedListener;
public void setOnSelectionChangedListener(onSelectionChangedListener selectionChangedListener) {
mSelectionChangedListener = selectionChangedListener;
}
public AtContentEditText(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public void onDraw(Canvas canvas) {
super.onDraw(canvas);
}
@Override
public void onSelectionChanged(int selStart, int selEnd) {
super.onSelectionChanged(selStart, selEnd);
if (mSelectionChangedListener != null) {
mSelectionChangedListener.onCursorChanged(selStart, selEnd);
}
}
}
监听光标,获取[/at]的位置并把光标放在最后面