3

カスタムレイアウトを実装しています。これは異質なグリッドであり、タイルがテキストを含む画像であるという事実を除いて、以下のようになります。さらに、アニメーション効果があります。基になるデータが変更されるたびに (項目の追加、削除、並べ替え)、アニメーションが発生し、各タイルが新しい位置に移動します。そして、これは完全に機能します。

全体が の中にありScrollViewます。ユーザーがアプリを起動すると、いくつかのタイル (最大 20 個) が表示されます。彼がスクロールの一番下に到達すると、新しいタイルが読み込まれます。タイルはRelativeLayouts.

私の質問は、ビューのリサイクルに関するものです。複数のサブビューを受け入れる、ListViewまたはGridViewリサイクル メカニズムを持つ典型的なレイアウト。スクロール時に、ビューが表示されていない場合、ビューはリサイクルされ、ユーザーに再び表示されるようになると元に戻ります。

そのような動作を実装する必要がありますか? そうしないとどうなりますか?新しいデータが到着したときに、サブビュー(レイアウトの表示部分にないこれらも)を新しい位置にアニメーション化する必要がある場合があるため、実装することさえ可能ですか。

または、ビットマップが可視領域外にある場合は、ビットマップをリサイクルする必要がありますか? これはおそらく、OutOfMemory にヒットする可能性がある場所ですよね。

異種グリッド

4

1 に答える 1

2

特にアイテムの数が事実上無制限である場合は、リサイクルを強くお勧めします。

あなたが言うように、ビットマップの処理に大きく依存するメモリの問題は別として、リサイクルしないと、より多くのアイテムをロードするときにジャダーが発生する可能性が高くなります。これは、リサイクルではなく、より多くのビューを作成する必要があるためです。

カスタム レイアウトを使用している場合、ビューのリサイクルの実装は非常に簡単です。ビューのキャッシュを保持し、Android の Adapter クラスと同様のパターンに従います (つまりgetView(int position, View convertView ..)、オフスクリーンからビューをアニメーション化する必要がある場合は、取得するために使用getView()します)。未使用のビューを更新し、モデル データを含めるようにします (これに MVC を使用していない場合は、それをお勧めします)。

于 2013-03-02T10:39:41.440 に答える