30、微信-表情相关
2016-02-24 13:27
411 查看
package com.example.wechat.chat; import android.content.Context; import android.graphics.drawable.Drawable; import android.text.Spannable; import android.text.style.ImageSpan; import com.example.wechat.R; import java.util.HashMap; import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * Created by sing on 2016/2/15. * 表情 */ public class SmileUtils { public static final String f_static_00 = "[):0]"; public static final String f_static_01 = "[):]"; public static final String f_static_02 = "[:D]"; public static final String f_static_03 = "[;)]"; public static final String f_static_04 = "[:-o]"; public static final String f_static_05 = "[:p]"; public static final String f_static_06 = "[(H)]"; public static final String f_static_07 = "[:@]"; public static final String f_static_08 = "[:s]"; public static final String f_static_09 = "[:$]"; public static final String f_static_010 = "[:(]"; public static final String f_static_011 = "[:'(]"; public static final String f_static_012 = "[:|]"; public static final String f_static_013 = "[(a)]"; public static final String f_static_014 = "[8o|]"; public static final String f_static_015 = "[8-|]"; public static final String f_static_016 = "[+o(]"; public static final String f_static_017 = "[<o)]"; public static final String f_static_018 = "[|-)]"; public static final String f_static_019 = "[*-)]"; public static final String f_static_020 = "[:-#]"; public static final String f_static_021 = "[:-*]"; public static final String f_static_022 = "[^o)]"; public static final String f_static_023 = "[8-)]"; public static final String f_static_024 = "[(|)]"; public static final String f_static_025 = "[(u)]"; public static final String f_static_026 = "[(S)]"; public static final String f_static_027 = "[(*)]"; public static final String f_static_028 = "[(#)]"; public static final String f_static_029 = "[(R)]"; public static final String f_static_030 = "[({)]"; public static final String f_static_031 = "[(})]"; public static final String f_static_032 = "[(k)]"; public static final String f_static_033 = "[(F)]"; public static final String f_static_034 = "[(W)]"; public static final String f_static_035 = "[(D)]"; public static final String f_static_036 = "[(D1)]"; public static final String f_static_037 = "[(D2)]"; public static final String f_static_038 = "[(D3)]"; public static final String f_static_039 = "[(D4)]"; public static final String f_static_040 = "[(D5)]"; public static final String f_static_041 = "[(D6)]"; public static final String f_static_042 = "[(D7)]"; public static final String f_static_043 = "[(D8)]"; public static final String f_static_044 = "[(D9)]"; public static final String f_static_045 = "[(D10)]"; public static final String f_static_046 = "[(D11)]"; public static final String f_static_047 = "[(D12)]"; public static final String f_static_048 = "[(D13)]"; public static final String f_static_049 = "[(D14)]"; public static final String f_static_050 = "[(D15)]"; public static final String f_static_051 = "[(D16)]"; public static final String f_static_052 = "[(D17)]"; public static final String f_static_053 = "[(D18)]"; public static final String f_static_054 = "[(D19)]"; public static final String f_static_055 = "[(D20)]"; public static final String f_static_056 = "[(D21)]"; public static final String f_static_057 = "[(D22)]"; public static final String f_static_058 = "[(D23)]"; public static final String f_static_059 = "[(D24)]"; public static final String f_static_060 = "[(D25)]"; public static final String f_static_061 = "[(D26)]"; public static final String f_static_062 = "[(D27)]"; private static final Spannable.Factory spannableFactory = Spannable.Factory.getInstance(); private static final Map<Pattern, Integer> emoticons = new HashMap<Pattern, Integer>(); static { addPattern(emoticons, f_static_00, R.drawable.f_static_00); addPattern(emoticons, f_static_01, R.drawable.f_static_01); addPattern(emoticons, f_static_02, R.drawable.f_static_02); addPattern(emoticons, f_static_03, R.drawable.f_static_03); addPattern(emoticons, f_static_04, R.drawable.f_static_04); addPattern(emoticons, f_static_05, R.drawable.f_static_05); addPattern(emoticons, f_static_06, R.drawable.f_static_06); addPattern(emoticons, f_static_07, R.drawable.f_static_07); addPattern(emoticons, f_static_08, R.drawable.f_static_08); addPattern(emoticons, f_static_09, R.drawable.f_static_09); addPattern(emoticons, f_static_010, R.drawable.f_static_010); addPattern(emoticons, f_static_011, R.drawable.f_static_011); addPattern(emoticons, f_static_012, R.drawable.f_static_012); addPattern(emoticons, f_static_013, R.drawable.f_static_013); addPattern(emoticons, f_static_014, R.drawable.f_static_014); addPattern(emoticons, f_static_015, R.drawable.f_static_015); addPattern(emoticons, f_static_016, R.drawable.f_static_016); addPattern(emoticons, f_static_017, R.drawable.f_static_017); addPattern(emoticons, f_static_018, R.drawable.f_static_018); addPattern(emoticons, f_static_019, R.drawable.f_static_019); addPattern(emoticons, f_static_020, R.drawable.f_static_020); addPattern(emoticons, f_static_021, R.drawable.f_static_021); addPattern(emoticons, f_static_022, R.drawable.f_static_022); addPattern(emoticons, f_static_023, R.drawable.f_static_023); addPattern(emoticons, f_static_024, R.drawable.f_static_024); addPattern(emoticons, f_static_025, R.drawable.f_static_025); addPattern(emoticons, f_static_026, R.drawable.f_static_026); addPattern(emoticons, f_static_027, R.drawable.f_static_027); addPattern(emoticons, f_static_028, R.drawable.f_static_028); addPattern(emoticons, f_static_029, R.drawable.f_static_029); addPattern(emoticons, f_static_030, R.drawable.f_static_030); addPattern(emoticons, f_static_031, R.drawable.f_static_031); addPattern(emoticons, f_static_032, R.drawable.f_static_032); addPattern(emoticons, f_static_033, R.drawable.f_static_033); addPattern(emoticons, f_static_034, R.drawable.f_static_034); addPattern(emoticons, f_static_035, R.drawable.f_static_035); addPattern(emoticons, f_static_036, R.drawable.f_static_036); addPattern(emoticons, f_static_037, R.drawable.f_static_037); addPattern(emoticons, f_static_038, R.drawable.f_static_038); addPattern(emoticons, f_static_039, R.drawable.f_static_039); addPattern(emoticons, f_static_040, R.drawable.f_static_040); addPattern(emoticons, f_static_041, R.drawable.f_static_041); addPattern(emoticons, f_static_042, R.drawable.f_static_042); addPattern(emoticons, f_static_043, R.drawable.f_static_043); addPattern(emoticons, f_static_044, R.drawable.f_static_044); addPattern(emoticons, f_static_045, R.drawable.f_static_045); addPattern(emoticons, f_static_046, R.drawable.f_static_046); addPattern(emoticons, f_static_047, R.drawable.f_static_047); addPattern(emoticons, f_static_048, R.drawable.f_static_048); addPattern(emoticons, f_static_049, R.drawable.f_static_049); addPattern(emoticons, f_static_050, R.drawable.f_static_050); addPattern(emoticons, f_static_051, R.drawable.f_static_051); addPattern(emoticons, f_static_052, R.drawable.f_static_052); addPattern(emoticons, f_static_053, R.drawable.f_static_053); addPattern(emoticons, f_static_054, R.drawable.f_static_054); addPattern(emoticons, f_static_055, R.drawable.f_static_055); addPattern(emoticons, f_static_056, R.drawable.f_static_056); addPattern(emoticons, f_static_057, R.drawable.f_static_057); addPattern(emoticons, f_static_058, R.drawable.f_static_058); addPattern(emoticons, f_static_059, R.drawable.f_static_059); addPattern(emoticons, f_static_060, R.drawable.f_static_060); addPattern(emoticons, f_static_061, R.drawable.f_static_060); addPattern(emoticons, f_static_062, R.drawable.f_static_062); } private static void addPattern(Map<Pattern, Integer> map, String smile, int resource) { map.put(Pattern.compile(Pattern.quote(smile)), resource); } /** * replace existing spannable with smiles * * @param context * @param spannable * @return */ public static boolean addSmiles(Context context, Spannable spannable) { boolean hasChanges = false; for (Map.Entry<Pattern, Integer> entry : emoticons.entrySet()) { Matcher matcher = entry.getKey().matcher(spannable); while (matcher.find()) { boolean set = true; for (ImageSpan span : spannable.getSpans(matcher.start(), matcher.end(), ImageSpan.class)) if (spannable.getSpanStart(span) >= matcher.start() && spannable.getSpanEnd(span) <= matcher.end()) spannable.removeSpan(span); else { set = false; break; } if (set) { hasChanges = true; Drawable drawable = context.getResources().getDrawable( entry.getValue()); drawable.setBounds(0, 0, 50, 50);// 这里设置图片的大小 ImageSpan imageSpan = new ImageSpan(drawable, ImageSpan.ALIGN_BOTTOM); spannable.setSpan(imageSpan, matcher.start(), matcher.end(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); } } } return hasChanges; } public static Spannable getSmiledText(Context context, CharSequence text) { Spannable spannable = spannableFactory.newSpannable(text); addSmiles(context, spannable); return spannable; } public static boolean containsKey(String key) { boolean b = false; for (Map.Entry<Pattern, Integer> entry : emoticons.entrySet()) { Matcher matcher = entry.getKey().matcher(key); if (matcher.find()) { b = true; break; } } return b; } }
这里面使用了正则表达式Pattern把表情符号诸如"[):0]"与具体头像资源进行匹配,在文本框里面既显示文字又能显示文本这里用到了Spannable,后面分别介绍。
相关文章推荐
- 27、微信聊天Fragment_Msg的代码实现
- 26、微信聊天Fragment_Msg的界面布局
- 24、微信-标题栏上的下拉菜单式弹窗TitlePopup
- 23、微信-温馨提示对话框WarnTipDialog
- 22、微信 - 主界面实现
- 21、微信 - 主界面布局
- 微信从无到有
- 如何使用腾讯微信公众平台示例代码…
- Java实现仿微信红包分配规则
- 传统媒体试水微信杂志 联手搭建销售新模式
- 微信红包算法
- 微信支付 系统繁忙
- IOS开发中的微信支付功能
- 微信的那个老外产品经理又写了一篇《中国移动应用设计趋势》
- Java学习:解数独的小程序
- 微信jsapi支付开发遇到的坑
- Java小程序——将浮点数转换成人民币读法
- 微信老外产品经理:《中国移动应用设计趋势》
- iOS开发支付集成之微信支付
- Java的小程序