19

私はこれについてあまり明確ではなく、ドキュメントもそうではありません。

カスタムビューを作成するときは、次のようにオーバーライドします。

@Override
public void onDraw(Canvas canvas) {
    super.onDraw(canvas);

    //more code here...
}

私の質問は、を呼び出す必要があるかどうかsuper.onDraw(canvas);です。コードはそれがなくても問題なく動作するようですが、省略しても問題ないことを確認したいと思います。

それで必要ですか?

4

4 に答える 4

19

スーパークラスのonDrawメソッド(汎用ビューではなくTextViewまたはKeyboardViewを考えてください)を呼び出したい場合は、super.onDrawを呼び出します。それを望まない場合、つまりビュー全体を自分で描画することを計画している場合(自分がそうしているように見えます)、それを呼び出す理由はありません。

また、Viewを拡張している場合(Viewを拡張するクラスではない場合)、super.onDrawは実際には何もしません。

私の場合、KeyboardViewに線を描画するときに、super.onDrawを呼び出します。したがって、super.onDrawはキーボードを描画し、私のカスタムLatinKeyboardView(KeyboardViewを拡張する)はキーボードの上にスワイプパスを描画します。

于 2012-04-09T02:56:15.267 に答える
9

ソースコードを覗いてみると、それView.onDraw()は空のメソッドであることがわかります。super.onDraw()したがって、親クラスがそれ自体である場合、を呼び出しViewても何も起こりません。それは不要ですが無害です。

とにかく先に進んでそれを行うべきかどうかは、効率、安全性、およびスタイルの別の問題です。

于 2012-05-24T01:24:26.763 に答える
2

はい、そうです。TextViewをカスタマイズする場合、super.onDrawは、TextView属性に属するもの(テキスト、テキストの色、テキストの影など)を確実に描画します。Button、CheckBoxなどの他のビューと同じです。

カスタムビューがビューを拡張する場合(ビューの特定のサブクラスではなく、ビューのみ)、一部のビューの描画メソッド(setBackgroundDrawableなど)用にsuper.onDraw(canvas)をそのままにしておくことをお勧めします。

于 2012-04-09T02:51:05.347 に答える
0

実際にonDraw()メソッドをオーバーライドしない限り、これは必須ではありません。新しいクラスがそれをオーバーライドしない場合、superのメソッドが自動的に呼び出されます。

于 2012-04-09T02:45:18.143 に答える