问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

IM项目中的自定义小表情实现

发布网友 发布时间:2023-01-20 04:50

我来回答

1个回答

热心网友 时间:2023-12-18 19:52

在im项目(Android)中,用户发消息,喜欢在文字中嵌入一些小表情,以表达发送者当时的情感。除了系统输入法自带的emoji表情(emoji其实是特殊的文字)外。项目希望带一些更漂亮,带产品特色文化的自定义小表情(小图片)。

图片嵌入在文字中显示,很明显可以使用ImageSpan去实现该效果。

效果如图:

实现上,主要问题是,实现文字与表情的转换。因此需要定义一套对应关系。

这里采用类似微信的实现,[key]对应表情。比如: [微笑] 对应 😊。

工具类:

主要就是做一个转换功能。同时需要考虑一下性能优化,否则效率低就会卡顿。

PS:这里优化了 查询转换策略 和 Drawable复用策略,供参考。

:Spannable有关的操作,少用String。使用CharSequence,因为不一定是String。用 SpannableString.valueOf(text) 代替 new SpannableString(text)

在TextView上使用,也写个BindingAdapter方法。

注:其中 TextUtils.ellipsize(emo, paint, avail, TextUtils.TruncateAt.END) 是为了解决表情在单行textView显示不下时显“...”.的问题。直接默认用TextView的 ellipsize 属性,对表情(ImageSpan)无效,会截成半个。

表情要在输入框中显示。根据输入code,自动转换成表情(ImageSpan)。

方案1:给EditView设置监听,在文字变化后将文字做个转换。这样效率超低,输入越多越卡。否决!

方案2:根据具体变化的文本设置转换。

:当前输入的东西(可能是复制过来的多个字符)。可能会影响到前面或后面的几个字符。

表情选择框操作

删除:模拟退格,表情需要整个整个删。

插入:将code插入到光标末尾。

转发到微信,有些表情微信里没有对应。转换成emoji代替。

要点:

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
临沂比较有名的男装品牌 呼伦贝尔市悦动网络科技有限公司怎么样? 呼伦贝尔中汇实业有限公司怎么样? 呼伦贝尔油玉不绝电子商务有限公司怎么样? 如何避免wps卡顿? 属鼠的男人找对象是属什么,属鼠的人和什么属相合 96年鼠的姻缘在哪年 属相相合年份运势提升 2024属鼠找对象属什么最佳 黑客攻击网站能报案吗 黑客攻击报案有用吗 华为输入法怎么设置使用emoji表情? 《庄子》庄子?外篇?知北游第二十一(2) 《庄子集解》外篇第二十二知北游(4) 皋壤是什么意思 庄子知北游的全文翻译 白话《庄子.知北游》:不伤物者,物亦不能伤也 国有房产拆迁有怎样的补偿呢 袁大头十年造肩章八角星,八角星带t点年最近什么价格啊? 惠子欲之梁文言文答案 惠子之梁告诉我们的道理? 安康市瀛湖生态旅游区南方小额贷款有限公司怎么样? 陕西安康高新区巴山小额贷款有限公司怎么样? 《铁路12306》身份证被抢注解决办法 只允许号码簿上号码打进来,公安局110能打进来吗 110和120能打通静音模式的电话吗 派出所调解时电话能打通吗 可以直接打110吗要加什么区号 楚雄州农村养老金每月领多少钱 文言文若且 文言文并且 为什么华为笔记本老款b比新款贵 如何阻止女朋友吐槽那些本是好习惯的行为? 《郑寺丞邓山长来访林中》的作者是谁?拜托各位了 3Q 比肩而立的意思 楷体加深是加粗吗 比肩同行的意思是什么 而子的一词多义解释有那几种解释 舍小我的文言文 春六十韵解释 关于凳的诗句 春六十韵里有月亮的别称吗对吗 怎样用海尔3D电视看3D电影 茶百道抖音直播怎么买 如何在同一部手机上同时登陆两个 一个手机怎么登录两个? 单车牌扑克所有系列的扑克都是纸牌吗? 手机打电话对方没有提示就挂断了是什么原因? 从高牌店到青青家园坐几路公交车 上新街到弹子石最近怎么的公交路线有哪些 天天猜成语的一个音符加功德两字是什么成语第十二关全部答案