1

我想自定义 EditText 的行为,例如HandRite

因此,我尝试在 ImageSpan 很多时检查 EditText 的编辑性能,但是在下面的代码之后使用触摸屏和 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 的行为

4

1 回答 1

0

由于 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);  
于 2015-06-09T05:07:54.950 回答