仅绘制编辑文本的可见区域



我有一个自定义的edittext,它可能包含扩展到1000行以上的大型输入文本。当edittext的内容非常大时,滚动开始变慢。这是由于我的过度绘制方法中的循环。此方法使用getlinecount方法,并对edittext的所有行执行绘制。是否可以只绘制edittext的可见区域,从而降低循环的复杂性?

public class LinedEditText extends EditText {
    private Rect mRect;
    public LinedEditText(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
    @Override
    protected void onDraw(Canvas canvas) {
        int height = getHeight();
        int lineHeight = getLineHeight();
        int count = height / lineHeight;
        if (getLineCount() > count)
            count = getLineCount();
        int baseline = getLineBounds(0, mRect);//first line
        for (int i = 0; i < count; i++) {
            //some operation for each line.
        }
        super.onDraw(canvas);
    }
}

我使用getScrollX()解决了它,从而找到了唯一可见的区域。

最新更新