반응형
페이스북이나 여러 소셜앱을 보면 문자로 이모티콘을 쓰면 그것을 나타내는 이미지 이모티콘으로 변형 되는것을 볼 수 있다.
Spannable 을 이용하여, 해당문자를 찾은뒤 이미지로 대체 하는 방법이다.
구현은 아래 기반으로 구현 가능하다.
private static final Factory spannableFactory = Spannable.Factory .getInstance(); private static final Map< Pattern, Integer > emoticons = new HashMap< Pattern, Integer >(); static { addPattern(emoticons, ":)", R.drawable.emo_im_happy); addPattern(emoticons, ":-)", R.drawable.emo_im_happy); // ... } private static void addPattern(Map< Pattern, Integer > map, String smile, int resource) { map.put(Pattern.compile(Pattern.quote(smile)), resource); } public static boolean addSmiles(Context context, Spannable spannable) { boolean hasChanges = false; for (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; spannable.setSpan(new ImageSpan(context, entry.getValue()), 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; }
반응형
'안드로이드 개발 > View' 카테고리의 다른 글
효율적인 Bitmap 이미지 라운딩 처리방법 (4) | 2013.07.24 |
---|---|
Android View 관련된 오픈소스 정리 (4) | 2013.05.27 |
페이스북 홈의 Chat Heads 처럼 모든화면에 떠있는 뷰 구현 (0) | 2013.04.09 |