2

View-class を、私が呼ぶものに拡張していますMyView。(基本的にオブジェクトに何が描かれているかを示し、これを処理するいくつかのプロパティを追加しました)

このクラスのオブジェクトを数ミリ秒ごとに移動していますが、これはうまく機能します。this.layout(left, top, right, bottom);MyViewを移動するために使用しています。しかし、ビューが移動されるたびに再描画されるようです (onDraw が呼び出されます)。これは必要ですか?移動しても内容はMyView変わりません。実際、コンテンツは決して変更されません。ある方法で作成され、移動し、後で破棄されます。

onDraw作成するたびに、テキストや数字を描画したいので、使用しています。以前は拡張ImageViewして使用しsetImageResourceていましたが、これにさまざまな画像以上のものが必要であることに気付き、このオブジェクトが持つことができるあらゆる種類のテキストと数値コンテンツの画像を作成するのは適切ではないと感じました.

また、オブジェクトが onTouch イベントを受信できることも重要です。これは現在正常に機能しています。

私のonDraw-methodには現時点で含まれています:(これは、常に再描画しないようにすると変更されます)

@Override
public void onDraw(Canvas canvas) {
    Paint p = new Paint();
    p.setARGB(255, 0, 255, 255);
    canvas.drawRect(0, 0, 32, 32, p);
}

問題は、作成時に動的に描画されるオブジェクトを作成し、タッチ イベントを受け取る可能性があるか(これは別の方法で解決できるので、あまり重要ではありません)、再描画せずにオブジェクトを移動できますか (最も重要です) 。 ?

その理由は、このクラスのオブジェクトをいくつか (100 以上になる可能性があります) 持つつもりであり、常にオブジェクトを再描画することでアプリケーションの速度が低下すると考えているためです。

編集:ビューでは不可能な場合、使用できる代替手段はありますか?

4

2 に答える 2

3

しかし、ビューが移動されるたびに再描画されるようです (onDraw が呼び出されます)。これは必要ですか?

はい。

View無効化メソッドを呼び出す必要があるため、オブジェクトは移動するたびに常に呼び出されonDrawます。そのため、そのオブジェクトに描画しているテキストまたは何かが新しい位置に描画されます。

作成時に動的に描画されるオブジェクトを持ち、タッチ イベントを受け取る可能性はありますか?

はい、達成したい内容に応じて、 TouchListenerをオブジェクトに拡張または実装するクラスのメソッドonTouchEventをオーバーライドできます。View

注: それほど多くのビュー オブジェクト (100 以上) を描画することはお勧めできません。Google 関係者がこれについて言及したことを覚えています。見つけ次第、リンクを使用して編集します。

于 2012-04-20T18:20:25.623 に答える