SpannableString 클래스의 SetSpan을 이용한 안드로이드 이미지 파싱

메신져를 사용하다 보면 글자와 이모티콘을 동시에 사용할 수 있습니다.
예를 들면 네이트온에서 /짱/ 이라고 입력하면 그에 해당하는 이미지가 출력되고 있습니다.
이것은 스트링을 이미지로 파싱한 결과인데요.
안드로이드에서 다음과 같은 기능을 어떻게 구현하는지 알아보겠습니다.

-image Parsing 메소드 구현부
 public SpannableString ImageParsing(Resources res, String text)
 {
      int Emoticoncount = 0;
      int EmoticonStringLen = 0;
      SpannableString result = new SpannableString(text);

      while(EmoticonCount < this.mIconNumber)
      {
          int EmoticonCurrentIndex = 0;
          
          while(true)
          {
               //Emoticon Search
               EmoticonCurrentIndex = text.indexOf(mEmoticons[EmoticonCount], 
                                     EmoticonCurrentIndex+EmoticonStringLen);
               //Image Parsing
               if(-1 < EmoticonCurrentIndex )
               {
                  EmoticonStringLen = mEmoticons[Emoticoncount].length();
                  Bitmap bm = EmoticonResourceBinder.getBitmapFromResourceId(res,
                                    mIconId[EmoticonCount]);
                  result.setSpan(new ImageSpan(bm), EmoticonCurrentIndex,
                             EmoticonCurrentIndex+mEmoticons[EmoticonCount].length(),
                             Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
               }
               else
                  break;
          }
          EmoticonCount++;
      }
      return result;
 }

상용화된 코드가 아니라 리펙토링도 되지 않고 고도화도 되지 않아 이래저래 길고,
while 문도 중첩되어 버렸지만 가장 중요한 부분은 아래 부분입니다.
 result.setSpan(new ImageSpan(bm), EmoticonCurrentIndex,
                             EmoticonCurrentIndex+mEmoticons[EmoticonCount].length(),
                             Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 

setSpan 메소드를 사용하여 문자열 사이사이에 이미지를 넣을수 있습니다.
간편하게 "글자 + 이미지 + 글자" 형식을 만들 수 있습니다.

+ Recent posts