布局优化Android

时间:2014-05-27 14:42:19

标签: android xml listview layout

我有一个ListView,其布局如下:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:inevent="http://schemas.android.com/apk/lib/com.estudiotrilha.inevent.view"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:paddingLeft="8dp"
    android:paddingRight="8dp"
    android:paddingBottom="8dp"
    android:id="@+id/list_events"
    android:addStatesFromChildren="true" >

    <RelativeLayout android:layout_width="fill_parent"
        android:layout_height="180dp"
        android:padding="1dp"
        android:background="@drawable/post" >

        <ImageView
            android:id="@+id/imageEventCover"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:src="@drawable/event_cover"
            android:scaleType="centerCrop" />

        <ProgressBar
            android:id="@+id/progressBar"
            style="?android:attr/progressBarStyle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"
            android:visibility="gone"
            android:layout_marginTop="25dp" />

        <com.estudiotrilha.inevent.view.NewTextView
            android:id="@+id/textIsEnrolled"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:padding="5dp"
            android:text="ENROLLED"
            android:textColor="@color/infoText"
            inevent:textFor="small"
            android:background="@color/infoBoxRed"
            android:layout_alignParentTop="true"
            android:layout_alignParentRight="true"
            android:layout_margin="10dp" />

        <RelativeLayout android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:background="@drawable/event_mark"
            android:layout_marginBottom="12dp"
            android:paddingLeft="15dp"
            android:paddingRight="15dp"
            android:paddingTop="10dp"
            android:paddingBottom="10dp" >

            <com.estudiotrilha.inevent.view.NewTextView 
                android:id="@+id/textEventName"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Lisbon Challenge"
                inevent:textFor="h3"
                android:paddingBottom="10dip"/>

            <ImageView
                android:id="@+id/imageCalendar"
                android:layout_below="@+id/textEventName"
                android:layout_width="18dp"
                android:layout_height="18dp"
                android:contentDescription="@string/facebookHolder"
                android:src="@drawable/ic_action_go_to_today" />

            <com.estudiotrilha.inevent.view.NewTextView  
                android:id="@+id/textEventDuration"
                android:layout_below="@+id/textEventName"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_toRightOf="@+id/imageCalendar"
                android:layout_marginLeft="5dp"
                android:textColor="#555"
                inevent:textFor="small"
                android:text="MAI 05-11, 2014" />

            <ImageView
                android:layout_below="@+id/textEventName"
                android:layout_width="18dp"
                android:layout_height="18dp"
                android:layout_toLeftOf="@+id/textEventPlace"
                android:contentDescription="@string/facebookHolder"
                android:src="@drawable/ic_action_place" />

            <com.estudiotrilha.inevent.view.NewTextView 
                android:layout_below="@+id/textEventName"
                android:id="@+id/textEventPlace"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentRight="true"
                android:layout_marginLeft="5dp"
                android:textColor="#555"
                inevent:textFor="small"
                android:text="Lisbon, Portugal" />

        </RelativeLayout>
    </RelativeLayout>

    <View android:layout_width="fill_parent"
        android:layout_marginRight="2dp"
        android:layout_marginLeft="2dp"
        android:layout_height="3dp"
        android:background="@drawable/shadow"/>
</LinearLayout>

ListView中,将放置几个带图像的项目。

以下是真实交易的样本:

Sample item

问题是所有图像都是异步加载的。

我正在使用Universal Image Loader加载这些图片。

如何优化列表?

感谢。

1 个答案:

答案 0 :(得分:1)

快速滚动被称为“投掷”,在动态加载图片的列表(来自网络或本地商店)上自然会非常密集,所以在移动设备上处理图片的唯一方法平台是

a)通过添加临时&#39;加载图片来改善用户体验:

DisplayImageOptions options = new DisplayImageOptions.Builder()
    .showImageOnLoading(R.drawable.ic_stub) // resource or drawable
    .build();

b)在发生投掷时,不要尝试任何过程密集渲染。屏幕移动速度太快,无论如何都无法呈现任何有用的东西,所以你也可以等到屏幕没有移动然后再尝试渲染任何东西:

boolean pauseOnScroll = false; // or true
boolean pauseOnFling = true; // or false
PauseOnScrollListener listener = new PauseOnScrollListener(imageLoader, pauseOnScroll, pauseOnFling);
listView.setOnScrollListener(listener);