在我的活動中我有一個DrawerLayout。其抽屜的ListView使用下面的MenuLVAdapter填充。列表中只有5個項目。各個項目的佈局由一個水平的LinearLayout組成,其中包含左側的一個ImageView和右側的一個TextView。選項的名字在字符串數組資源中,圖標是可繪製的資源。每個drawable是一個128x128透明背景PNG,每個大約7KB。DrawerLayout由於圖標圖像顯示而滑動/滾動時滯後
問題是,當我滑動抽屜時,設備呈現圖標時動畫非常不連貫。在此之前,抽屜應該滑動。打開/關閉抽屜和滾動時也會出現同樣的波紋。如果沒有自定義圖像(使用股票@android:drawable/ic_menu_gallery圖標),那麼沒有任何延遲。
我只在一個WVGA hTC Desire X打包雙核1GHz CPU & 768MB RAM上進行了測試。我相信我可能需要調整圖像大小並使其變小,但我不確定適當的尺寸應該是多少。我的應用程序也有一個活動,包裝一個幾乎ideards佈局的ListView,圖標是256x256透明PNG。這個作品像一個魅力 - 唯一的區別是它不是一個抽屜佈局,而且每個項目的圖像都是一樣的。我也注意到,使抽屜的ListView內的ImageView更大使它甚至變成laggyer。
我已經嘗試了一些事情,從設置圖像作爲drawables或bitmaps來代替,將視圖聲明爲全局的,並且只使用FindViewById,啓用/禁用滾動緩存並在抽屜的ListView上持久繪製緩存加載一次,但這些都沒有任何影響。
我該怎麼做才能擺脫滯後?
這裏是爲ListView(注:我已禁用自定義字體加載,仍無法正常工作):適配器
class MenuLVAdapter : BaseAdapter
{
string[] items;
int[] images =
{
Resource.Drawable.dash_menuicon_home,
Resource.Drawable.dash_menuicon_mydashers,
Resource.Drawable.dash_menuicon_history,
Resource.Drawable.dash_menuicon_settings,
Resource.Drawable.dash_menuicon_exit
};
Activity context;
public MenuLVAdapter(Activity context)
{
this.context = context;
items = context.Resources.GetStringArray(Resource.Array.menuLVArray);
}
public override long GetItemId(int position)
{
return position;
}
public override Java.Lang.Object GetItem(int position)
{
return items[position];
}
public string[] Items
{
get { return items; }
}
public override int Count
{
get { return items.Length; }
}
public override View GetView(int position, View convertView, ViewGroup parent)
{
View view = convertView ?? context.LayoutInflater.Inflate (Resource.Layout.MenuLVLayout, null); // re-use an existing view, if one is available
TextView menuItemNameTV = view.FindViewById<TextView>(Resource.Id.menuItemName);
ImageView menuItemIconIV = view.FindViewById<ImageView>(Resource.Id.menuItemIcon);
menuItemNameTV.Text = items[position];
menuItemIconIV.SetImageResource(images[position]);
Typeface erasMid = Typeface.CreateFromAsset(context.Assets, "Fonts/ERASM.TTF");
menuItemNameTV.SetTypeface(erasMid, TypefaceStyle.Normal);
return view;
}
}
而且,這裏是我的MenuLVLayout.xml文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:padding="10dp">
<ImageView
android:src="@android:drawable/ic_menu_gallery"
android:layout_width="35dp"
android:layout_height="35dp"
android:id="@+id/menuItemIcon" />
<TextView
android:id="@+id/menuItemName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="#000"
android:text="Name"
android:textSize="20sp"
android:layout_marginLeft="9.3dp"
android:layout_gravity="center_vertical" />
</LinearLayout>
任何幫助將不勝感激! 謝謝!
ic_menu_gallery的分辨率是多少?你有沒有爲每個屏幕分辨率(mdpi - xxhdpi)製作圖形? – stewjacks
我不知道ic_menu_gallery的解決方案,它來自股票Android資源。不,我沒有爲每個屏幕分辨率製作圖形。這會有幫助嗎?由於目前的尺寸相當低(128x128),與我的mdpi(72x72)的標準相比,我不明白爲什麼它會是一個很大的問題。 –
你的圖形很好,不應該是一個問題。您可能希望在Eclipse中查看[Hierarchy Viewer](http://developer.android.com/tools/help/hierarchy-viewer.html)或DDMS中的Dump View Hierarchy函數,以查看是否存在過於複雜的方法視圖層次結構被組織 – stewjacks