Android显示自定义聊天表情

思路:

1、用RecycleView加载表情

2、每一个表情对应一个key

3、输入聊天框:自定义监听EditText获取到内容,找出内容包含的key,将key替换成图片

4、显示聊天记录:同理,自定义TextView

按照上面的思路完成功能:

第一步:引入图片

将所有的表情图片引入到drawable(或者加入压缩包,代码解压缩包,本地引入)

我是摸鱼摆烂,直接引入到drawable里的,哈哈哈哈

文件命名格式最好有规律,方便CV

第二步:创建表情List以及map

(List是RecycleView展示用,Map是监听文字内容包含的key,查找替换图片,用List还需循环)

创建实体类,方便引用

public class EmojiBean {
    private String code;
    private int icon;

    public EmojiBean(String code, int icon) {
        this.code = code;
        this.icon = icon;
    }

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public int getIcon() {
        return icon;
    }

    public void setIcon(int icon) {
        this.icon = icon;
    }

    @Override
    public String toString() {
        return "EmojiBean{" +
                "code='" + code + '\'' +
                ", icon=" + icon +
                '}';
    }
}

 创建List以及Map

import android.os.Build;

import com.okcis.linphone_demo.R;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class EmojiManager {
    public static final List<EmojiBean> EMOJI_LIST = new ArrayList<>();
    public static Map<String, Integer> EMOJI_MAP = new HashMap<>();


    public EmojiManager(){
        // 初始化表情数据
        EMOJI_LIST.add(new EmojiBean("[微笑]", R.drawable.emoji_0));
        EMOJI_LIST.add(new EmojiBean("[撇嘴]", R.drawable.emoji_1));
        //....省略
        EMOJI_LIST.add(new EmojiBean("[转圈]", R.drawable.emoji_108));

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            //将List转为Map,时代在发展,暂时不考虑N以下的设备
            EMOJI_MAP = EMOJI_LIST.stream().collect(Collectors.toMap
                    (EmojiBean::getCode, EmojiBean::getIcon, (value1, value2) -> value1));
        }
    }

    public static List<EmojiBean> getEmoticonList() {
        return EMOJI_LIST;
    }
    public static Map<String, Integer> getEmoticonMap() {
        return EMOJI_MAP;
    }
}

将整个功能模块封装 

加入到RecycleView

import android.content.Context;
import android.view.View;

import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import com.okcis.linphone_demo.R;
import com.okcis.linphone_demo.page.msg.emoji.data.EmojiBean;
import com.okcis.linphone_demo.page.msg.emoji.data.EmojiCallback;
import com.okcis.linphone_demo.page.msg.emoji.data.EmojiManager;
import com.okcis.linphone_demo.page.msg.emoji.data.EmojiAdapter;

import java.util.List;


public class EmojiView {
    private Context mContext;
    private View emojiView;
    private EmojiCallback mEmojiCallback;

    public EmojiView(Context context){
        mContext = context;
        initView();
    }

    private void initView(){
        emojiView = View.inflate(mContext, R.layout.chat_emoji_view_layout, null);
        EmojiManager emojiManager = new EmojiManager();
        RecyclerView recyclerView = emojiView.findViewById(R.id.recyclerView_emoji);
        List<EmojiBean> items = emojiManager.getEmoticonList();
        RecyclerView.LayoutManager layoutManager = new GridLayoutManager(mContext, 8
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值