2012-10-09 17 views
9
This is :) and want to :) replace with :D new image. 

मेरे पास इस प्रकार की स्ट्रिंग है जो मुझे EditTextbox.Nw से मिली है, मैं छवि 1 और ": D" के साथ सभी ":)" को प्रतिस्थापित करना चाहता हूं image2.I string.replaceall (":)", image1) और string.replaceall (": D", image2) की तरह करना चाहते हैं। तो क्या कोई मुझे सुझाव दे सकता है कि इसे छोटे कोड के साथ कैसे करें और बेहतर प्रदर्शन भी करें। मेरे पास है कोड लिखें और यह भी ठीक काम कर रहा है लेकिन इसमें अधिक समय लगता है।छवियों को स्ट्रिंग में छवि के साथ बदलें और फिर टेक्स्टव्यू

textview.setText(getSmiledText(ctx, stringvalue)); 
private static final HashMap<String, Integer> emoticons = new HashMap<String, Integer>(); 
    static { 
     emoticons.put(":)", R.drawable.j1); 
     emoticons.put(":D", R.drawable.j2);} 

public static Spannable getSmiledText(Context context, String s) { 
     int index; 
     SpannableStringBuilder builder = new SpannableStringBuilder(); 
     builder.append(s); 

     for (index = 0; index < builder.length(); index++) { 
      for (Entry<String, Integer> entry : emoticons.entrySet()) { 
       int length = entry.getKey().length(); 
       if (index + length > builder.length()) 
        continue; 
       if (builder.subSequence(index, index + length).toString() 
         .equals(entry.getKey())) { 
        builder.setSpan(new ImageSpan(context, entry.getValue()), 
          index, index + length, 
          Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
        index += length - 1; 
        break; 
       } 
      } 
     } 
     return builder; 
    } 
+0

'यह काम कर रहा है भी तो fine' क्या सवाल फिर से था? – njzk2

+0

मुझे बेहतर समाधान की आवश्यकता है जो प्रदर्शन को बढ़ाएगा। यह काम कर रहा है लेकिन अधिक समय लेता है bcz यह चरित्र द्वारा चरित्र की जांच करेगा। इसलिए मुझे बेहतर समाधान की आवश्यकता है – Nency

+0

ऐसा लगता है कि 'सेटस्पैन' सबसे धीमा हिस्सा है ... मेरे पास समान है पाठ के पृष्ठभूमि रंग को बदलने के साथ समस्या। – bancer

उत्तर

0

आपको बस इतना करना बस छवियों रन टाइम, लोड छवियों को पहले नहीं लोड और चर में बचाने के लिए और सिर्फ रन टाइम पर छवियों आवंटित किया जाता है की जरूरत है। एफवाईआई पात्र समस्या नहीं है, मैं पहले एक ही मुद्दे से आया था, मैंने इसे स्पर्श बिंदु के मुद्दे के रूप में समझा, लेकिन समस्या छवियों को लोड कर रही थी।

+0

क्या आप छवि को previosly लोड करने के तरीके को और अधिक समझा सकते हैं? मैंने इस इमोटिकॉन्स.पूट (":)", R.drawable.j1) जैसी छवियां सेट की हैं; इमोटिकॉन्स.पुट (": डी", R.drawable.j2); तो अब मैं कैसे कर सकता हूँ? – Nency

+0

बिटमैप बिटमैप = बिटमैपफैक्टरी.decodeResource (getResources(), R.drawable.j1); बिटमैप बिटमैप 1 = बिटमैपफैक्टरी.decodeResource (getResources(), R.drawable.j2); builder.setSpan (बिटमैप, अनुक्रमणिका, अनुक्रमणिका + लंबाई, स्पैन करने योग्य .SPAN_EXCLUSIVE_EXCLUSIVE); मुझे उम्मीद है कि इससे मदद मिलती है। – jay

+0

YOu स्ट्रिंग और बिटमैप को आपके हैशैप में भी डाल सकता है। – jay

0

चेक करें:

public static Spannable getSmiledText(Context context, String s) 
    { 
    int index; 
    SpannableStringBuilder builder = new SpannableStringBuilder(); 
    builder.append(s); 

    for (Entry<String, Integer> entry : EmoticonsCode.emoticons_code.entrySet()) 
    { 
     try { 
      int length = entry.getKey().length(); 
      for (index = s.indexOf(entry.getKey()); index >= 0; index = s.indexOf(entry.getKey(), index + 1)) 
      { 
       System.out.println(index); 
       builder.setSpan(new ImageSpan(context, entry.getValue()), index, index + length, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
      } 
     } catch (Exception e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 
    return builder; 
}