我有一个自定义的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()解决了它,从而找到了唯一可见的区域。