package com.anthony.inputlayout.utils;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.style.ImageSpan;
import com.trs.inputlayout.R;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class EmotionUtil {
public static final String REGEX_EMOJI = ":[\u4e00-\u9fa5\\w]+:";
public static final String REGEX_GROUP = "(" + REGEX_EMOJI + ")";
private EmotionUtil() {
}
public static final Map<String, Integer> sEmotionMap;
public static final String[] sEmotionKeyArr = new String[]{
":smile:",
":smiley:",
":grinning:",
":blush:",
":relaxed:",
":wink:",
":heart_eyes:",
":kissing_heart:",
":kissing_closed_eyes:",
":kissing:",
":kissing_smiling_eyes:",
":stuck_out_tongue_winking_eye:",
":stuck_out_tongue_closed_eyes:",
":stuck_out_tongue:",
":flushed:",
":grin:",
":pensive:",
":relieved:",
":unamused:",
":disappointed:",
":persevere:",
":cry:",
":joy:",
":sob:",
":sleepy:",
":disappointed_relieved:",
":cold_sweat:",
":sweat_smile:",
":sweat:",
":weary:",
":tired_face:",
":fearful:",
":scream:",
":angry:",
":rage:",
":dog:",
":pig:",
};
public static final int[] sEmotionValueArr = new int[]{
R.drawable.ic_emoji_1,
R.drawable.ic_emoji_2,
R.drawable.ic_emoji_3,
R.drawable.ic_emoji_4,
R.drawable.ic_emoji_5,
R.drawable.ic_emoji_6,
R.drawable.ic_emoji_7,
R.drawable.ic_emoji_8,
R.drawable.ic_emoji_9,
R.drawable.ic_emoji_10,
R.drawable.ic_emoji_11,
R.drawable.ic_emoji_12,
R.drawable.ic_emoji_13,
R.drawable.ic_emoji_14,
R.drawable.ic_emoji_15,
R.drawable.ic_emoji_16,
R.drawable.ic_emoji_17,
R.drawable.ic_emoji_18,
R.drawable.ic_emoji_19,
R.drawable.ic_emoji_20,
R.drawable.ic_emoji_21,
R.drawable.ic_emoji_22,
R.drawable.ic_emoji_23,
R.drawable.ic_emoji_24,
R.drawable.ic_emoji_25,
R.drawable.ic_emoji_26,
R.drawable.ic_emoji_27,
R.drawable.ic_emoji_28,
R.drawable.ic_emoji_29,
R.drawable.ic_emoji_30,
R.drawable.ic_emoji_31,
R.drawable.ic_emoji_32,
R.drawable.ic_emoji_33,
R.drawable.ic_emoji_34,
R.drawable.ic_emoji_35,
R.drawable.ic_emoji_36,
R.drawable.ic_emoji_test
};
static {
sEmotionMap = new HashMap<>();
int count = sEmotionKeyArr.length;
for (int i = 0; i < count; i++) {
sEmotionMap.put(sEmotionKeyArr[i], sEmotionValueArr[i]);
}
}
public static int getImgByName(String imgName) {
Integer integer = sEmotionMap.get(imgName);
return integer == null ? -1 : integer;
}
public static SpannableString getEmotionText(Context context, String source, int emotionSizeDp) {
SpannableString spannableString = new SpannableString(source);
Pattern pattern = Pattern.compile(REGEX_GROUP);
Matcher matcher = pattern.matcher(spannableString);
if (matcher.find()) {
matcher.reset();
}
while (matcher.find()) {
String emojiStr = matcher.group(1);
// 处理emoji表情
if (emojiStr != null) {
ImageSpan imageSpan = getImageSpan(context, emojiStr, emotionSizeDp);
if (imageSpan != null) {
int start = matcher.start(1);
spannableString.setSpan(imageSpan, start, start + emojiStr.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
}
}
return spannableString;
}
public static ImageSpan getImageSpan(Context context, String emojiStr, int emotionSizeDp) {
ImageSpan imageSpan = null;
int imgRes = getImgByName(emojiStr);
Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(), imgRes);
if (bitmap != null) {
int size = Utils.dip2px(context, emotionSizeDp);
bitmap = Bitmap.createScaledBitmap(bitmap, size, size, true);
imageSpan = new ImageSpan(context, bitmap);
}
return imageSpan;
}
}