2

Android には、View を拡張するクラスがあります。特定の状況下では、自分自身を描画しないようにします。View.INVISIBLE または View.GONE に setVisibility() を設定できることはわかっていますが、できればそれは避けたいと思います。このカスタム ビューが表示されている場合と表示されていない場合では、コードの他の部分の動作が異なります。必要がなければ、それらを書き換えたくありません。

当初は、次のように onDraw() をオーバーライドするのと同じくらい簡単だと思っていました...

@Override
protected void onDraw(Canvas canvas) {
   if(...){ //check some member variables
      return;
   } else {
      //draw code
   }
}

これはほとんどのビューで機能しましたが、条件チェックの結果に関係なく背景が表示されることがわかりました。ドキュメントを少し読んだ後、私はこれを見つけました...

「描画は、ツリーをたどり、無効な領域と交差する各ビューをレンダリングすることによって処理されます。ツリーは順番にトラバースされるため、これは、親が子の前 (つまり、後ろ) に描画し、兄弟が表示される順序で描画されることを意味します。ビューにバックグラウンド ドローアブルを設定すると、ビューはその onDraw() メソッドをコールバックする前にそれを描画します。"

私が思いついた解決策は、ちょっとしたハックです...

@Override
protected void onDraw(Canvas canvas) {
   if(...){ //check some member variables
      //set background to transparent
      return;
   } else {
      //restore default background
      //draw code
   }
}

したがって、私の質問は次のようになると思います:ビューの可視性または背景を変更する必要がないように、ビューのデフォルトの背景描画動作をオーバーライドする方法はありますか?

4

1 に答える 1