效果图:
文字:[微笑][微笑][微笑][微笑][微笑]
替换后:
前提:已有表情图片,所以只能使用自己的表情图片
操作:
- 将表情图片放在mipmap文件夹下
- 将文字和表情图片一一对应
这里我是建立了一个类,定义了一个map
public static Map<String, Integer> emojiList = new HashMap<String, Integer>();
emojiList.add(emojiList,"[微笑]", R.mipmap.emotion_weixiao_gif);
- 替换语句中对应的表情文字
public SpannableString disposeText(String text){ //text:需要替换的句子
//使用SpannableString
SpannableString newText=new SpannableString(text);
//匹配所有带有[]的词语
Pattern pattern=Pattern.compile("\\[.+?\\]");
Matcher matcher=pattern.matcher(text);
//循环匹配结果
while (matcher.find()){
//如果emojiList含有,进行替换
if(EmojiDate.emojiList.get(matcher.group())!=null){
//下面代码可以用更下面的那部分代码替换
Bitmap bitmap= BitmapFactory.decodeResource(context.getResources(),EmojiDate.emojiList.get(matcher.group()));
//需要传递进文字的大小,更好的确定表情的大小
Bitmap scaleBitmap=Bitmap.createScaledBitmap(bitmap,(int)textSize*15/10,(int)textSize*15/10,true);
ImageSpan span=new ImageSpan(context,scaleBitmap);
newText.setSpan(span,matcher.start(),matcher.end(),Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
}
}
return newText;
}
//此段代码可替换上面的if中的代码
Drawable drawable=(Drawable)context.getResources().getDrawable(EmojiDate.emojiList.get(matcher.group()));
drawable.setBounds(0,0,20,20);
ImageSpan span=new ImageSpan(drawable,ImageSpan.ALIGN_BOTTOM);
但是上面的这个代码有一个问题,也许是我的图片的问题,下面的代码并不能调整表情的大小,这样会导致表情重叠起来
这样显示出来就是表情了
效果图: