本文实例讲述了Android编程开发实现输入(自定义表情包)QQ表情图像并发送出去别人收到并解析出来的方法。分享给大家供大家参考,原来QQ微信等发送表情其实发送的都不是表情,而是一个富文本,收到消息后再解析得来的,具体效果如下
:
表情发送出去是这样:
最近在开发的一个项目是即时通讯项目,像QQ,微信等功能的项目,其中我负责的一个模块中含有表情发送的
功能,具体需求如下:
1:自定义我们自己的表情包
2:在输入框旁边点击头像按钮像QQ微信一样跳出很多表情供我们选择
3:点击表情在输入框中显示,可以和文字混合排列。
*************************************************这是个分界线***************************************************************
4:点击发送通过服务器发出去
5:对方收到文字和表情的信息(注意这里是表情而不是一个符号或者文字),并且可以正常交流。
***********************************************这又是一个分界线************************************************************
6:在输入表情的时候会出现在文字中间插入表情的时候就会插入到最后,但是已经解决了。
下面开始我的开发步骤:
因为之前没有遇到这样的问题,网上也比较少的讲述,也是查阅了很久结合自己的感悟,其中上面的分界线是卡着
我两天的地方,所以做一个分界线,纪念一下,好了开始正题:
1:首先找到表情图片的资源,图片截图如下:
2:如果有需要的话我放个链接:自定义表情QQ微信等表情包。
3:为了简单起见我只选择了7张图片分别定义为f001-f007为图片名,放到不同的分辨率的文件夹下面,这步相信大家都会。
4:在values文件夹下面的arrays.xml中定义如下格式(当然根据我们自己的定义,这个定义是和文字一起传输代替表情的符号):
<?xml version="1.0" encoding="UTF-8"?>
<resources>
<!--表情的自定义格式-->
<string-array name="default_smiley_texts">
<item>"[emoticon1]"</item>
<item>"[emoticon2]"</item>
<item>"[emoticon3]"</item>
<item>"[emoticon4]"</item>
<item>"[emoticon5]"</item>
<item>"[emoticon6]"</item>
<item>"[emoticon7]"</item>
</string-array>
</resources>
5:构建一个工具类来解析我们的表情包,这里我取名为SmileyParser.java文件放在我们的工具文件夹下面如下:
package com.im.rainbowchat.logic.chat_friend.utils;
import android.content.Context;
import android.text.Spannable;
import android.text.SpannableStringBuilder;
import android.text.style.ImageSpan;
import com.im.R;
import java.util.HashMap;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* 表情解析工具类
* 解析Text中的表情图片
* Created by AndyYuan on 2018/10/27.
*/
public class SmileyParser {
/**
* 单例模式 1文字资源,图片资源 2.使用正则表达式进行匹配文字 3.把edittext当中整体的内容匹配正则表达式一次
* 4.SpannableStringBuilder 进行替换
*/
private static SmileyParser sInstance;
public static SmileyParser getInstance() {
return sInstance;
}
public static void init(Context context) {
sInstance = new SmileyParser(context);
}
private final Context mCont