Android EditText.onDraw()让人痛苦

时间:2012-04-09 18:10:54

标签: android-edittext

我试图在EditText的背景上绘制一些线条。

我将EditText子类化,并在我的xml布局中包含完全限定的包名称,替换了之前的EditText声明。

然后我实现了onDraw();但是正在发生的事情是,onDraw似乎在一个无限循环中被一遍又一遍地调用。

我想也许我正在推出一个无限递归,所以除了日志消息之外,我对所有内容进行了评论,并且它仍在发生。

这里发生了什么?

package myview;
import android.content.Context;
import android.graphics.Canvas;
import android.util.AttributeSet;
import android.util.Log;
import android.widget.EditText;

public class LinedEditView extends EditText {

  public LinedEditView(Context context, AttributeSet attrs) {
    super(context, attrs);
  }

  public LinedEditView(Context context) {
    super(context);
  }

  public LinedEditView(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
  }

  @Override
/////// KEEPS GETTING CALLED !!!!!!??????? ////////////
  protected void onDraw(Canvas canvas) {
    Log.d("LinedEditView", "Calling onDraw()");
    super.onDraw(canvas);
  }
}

1 个答案:

答案 0 :(得分:2)

看起来每次调用onDraw()时都会记录,可能每帧一次(或者每次更新需要一次)。

通常动画循环的工作方式是它完全是一个无限循环,一遍又一遍地调用,并根据视图调用时的状态绘制到画布。