EditText是太慢的,当有许多ImageSpan在它



我想自定义EditText的行为像HandRite。

所以我试着检查EditText的编辑性能时,有许多ImageSpan,但它太慢时,添加或删除字符在中间使用触摸屏和IME下面的代码后。

我怎样才能加快这个性能?

StringBuilder sb = new StringBuilder();
    for (int i = 0; i < 1000; i++) {
        sb.append(' ');
    }
    SpannableString ss = new SpannableString(sb.toString());
    Random random = new Random();
    for (int i = 0; i < 1000; i++) {
        Drawable d = new ColorDrawable(random.nextInt());
        d.setBounds(0, 0, mEditText.getLineHeight(), mEditText.getLineHeight());
        ImageSpan span = new ImageSpan(d, ImageSpan.ALIGN_BASELINE);
        ss.setSpan(span, i, i+1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
    }
    mEditText.setText(ss);

HandRite的行为

由于ImageSpan对象的数量非常大,在你的SpannableString中几乎有1000个,这导致它变得很慢。

尝试将HTML文本与ImageGetter一起使用并检查性能:

ImageGetter imageGetter = new ImageGetter() {
            public Drawable getDrawable(String source) {    
                StringTokenizer st = new StringTokenizer(index, ".");
                Drawable d = new BitmapDrawable(getResources(),emoticons[Integer.parseInt(st.nextToken()) - 1]);
                d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());
                return d;
            }
        };
        Spanned cs = Html.fromHtml("<img src ='"+ index +"'/>", imageGetter, null);  

相关内容

  • 没有找到相关文章

最新更新