0

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);
  }
}
4

1 に答える 1

2

onDraw()が呼び出されるたびにログを記録しているようです。これは、フレームごとに1回(または更新が必要な場合は更新ごとに1回)であると考えられます。

Usually the way an animation loop works is that it is exactly an infinite loop, which is called over and over again, and draws to the canvas depending on the state of the view at the time at which it is called.

于 2012-10-17T23:22:29.390 に答える