ListView
リストアイテムにバックグラウンドリソースがある場所で作業しています。できるだけ多くのオーバードローを取り除きたいです。RomainGuyのブログにあるPerformanceCaseStudyの投稿を知っていますが、リストビューを完全に最適化するのに問題があります。簡略化された例のコードは、この投稿の下部に示されています。この例は基本的に、リストビューがスローされた「新しいアクティビティ」ウィザードです。私の質問はこの例に基づいています。これは、最初の最適化されていないケースのオーバードローマーキングがある場合とない場合のスクリーンショットです。
ページの背景が灰色(実際のプロジェクトではテクスチャ)であり、リストアイテムの背景が白(実際のプロジェクトでは9パッチ)であることを確認してください。オーバードローは劇的で、画面のどの部分も1回だけ描画されることはなく、リストアイテムはコンテンツの文字が表示される前に3回描画されます。
の装飾ビューの背景を取り除き、Window
オーバードローの完全なレイヤーをカットするのは簡単です。リストに画面全体を埋めるのに十分なアイテムが含まれている場合はListView
、非常に良い場所にヒットしたときに背景を斧することもできます。
残念ながら、リストの項目が画面全体よりも少ない場合、これは機能しません。背景をまったく設定しないと、リストアイテムの下には何も表示されません。リストビュー(または任意の親)に背景を設定すると、存在するすべてのリストアイテムが完全に上書きされます。
ほとんどの場合、私のリストが画面からはみ出すので、それはそれほど悪いことではありませんが、不満です。オーバードローを導入せずに、最後のアイテムの後にリストビューの背景を取得する信頼できる方法はありますか?
この質問で使用されるサンプルコード:
アクティビティ:
//MainActivity.java
public class MainActivity extends Activity {
private static final String[] DATA = { "Alpha", "Bravo", "Charlie", "Delta", "Echo", "Foxtrot", "Golf", "Hotel", "India", "Juliet" };
@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Optimization 1: getWindow().setBackgroundDrawableResource(android.R.color.transparent);
ListView lv = (ListView) findViewById(android.R.id.list);
lv.setAdapter(new ArrayAdapter<String>(this, R.layout.activity_main__list_item,
android.R.id.text1, data));
}
}
レイアウト:
<!-- layout/activity_main.xml -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:layout_width="match_parent"
android:layout_height="48dp"
android:background="#FFDDDDDD"
android:text="Page header information" />
<ListView
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:background="#FFDDDDDD"
android:divider="@null" />
</LinearLayout>
<!-- layout/activity_main__list_item.xml -->
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/text1"
android:layout_width="match_parent"
android:layout_height="48dp"
android:background="@android:color/white" />