当其中有许多ImageSpan时,EditText太慢了

时间:2015-06-09 04:50:18

标签: android android-edittext imagespan

我想自定义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's behavior

1 个答案:

答案 0 :(得分:0)

由于您的SpannableString中ImageSpan对象的数量非常大,几乎是1000,这导致它变慢。

尝试使用HTML teext和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);