の関数RoundRectShape
で描画される があります。View
onDraw()
この形状の角は、オーバーライドされたonTouchEvent
関数 (invalidate()
への呼び出しを強制するために呼び出されますonDraw()
) を介して、このビューでのドラッグ アクションによって変更されます。
で変数を初期化するときに、Eclipse は、描画/レイアウト操作中にオブジェクトの割り当てを回避する (代わりに事前に割り当てて再利用する)onDraw
という警告を表示します。
この問題は次のように説明されています。
描画またはレイアウト操作中にオブジェクトを割り当てることは避けてください。これらは頻繁に呼び出されるため、スムーズな UI は、オブジェクトの割り当てによって発生するガベージ コレクションの一時停止によって中断される可能性があります。
これが一般的に処理される方法は、オブジェクトを前もって割り当て、描画操作ごとに再利用することです。
これを行うには、明らかに、コンストラクターで設定されている角の半径を変更できる必要があります。RoundedRectShapeクラスにはセッターがありません (関連するメンバー変数にアクセスできないことは確かです)。
これが小さなオブジェクトで小さな問題であることはわかっていますが、角の丸みの半径を設定するためにクラスが提供する唯一の方法がコンストラクターを使用する場合、オブジェクトを再初期化せずにこれらの角を変更するにはどうすればよいでしょうか?
それとも、これは最善を尽くすことを、可能なことを行うことに置き換えなければならない場合にすぎませんか?
ありがとう、
PSメソッドでコンストラクターを呼び出すと、警告は削除されますが、とにかく毎回呼び出されるonTouchEvent()
ため、何も達成されませんonDraw()
invalidate()