2010-10-29 52 views
1

我已經創建了一個ListView與TextViews作爲項目對開五色 - 其中大部分有一定的顏色作爲背景,但一些有一個自定義@繪製/形狀作爲背景(即頂部和底部項目,有圓角)。 這些背景被設置爲狀態列表的一部分,以便在物品被點擊時提供另一種背景顏色。 ListView中的listSelector被設置爲透明的,並且不是在物品載TextViews被設置爲點擊。StateListDrawable ListView中奇怪在一定的條件下

的ListView:

<ListView android:id="@+id/allreminders_list" android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:dividerHeight="3px" android:cacheColorHint="#00000000" 
android:divider="@color/trans" android:background="@drawable/reminderlist_background" 
android:listSelector="@android:color/transparent"/> 

的ListView項:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" android:layout_height="?android:attr/listPreferredItemHeight" 
android:id="@+id/entry_container"> 
<TextView android:id="@+id/remindername" android:layout_width="fill_parent" 
android:layout_height="fill_parent" android:text="dummy" 
android:padding="15dp" android:layout_marginLeft="15px" 
android:layout_marginRight="15px" style="@style/ReminderEntry" 
android:clickable="true"/> 
</RelativeLayout> 
的ListView的條目背景

的程序化設置:

if (position == 1) 
textViewReminderName 
    .setBackgroundResource(R.drawable.reminder_entry_state_top); 
else if (position == remindersInSection) 
textViewReminderName 
    .setBackgroundResource(R.drawable.reminder_entry_state_bottom); 
else 
textViewReminderName 
    .setBackgroundResource(R.drawable.reminder_entry_state); 

國家列表頂部的項目(R.drawable.reminder_entry_state_top) :

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:state_pressed="true" android:drawable="@drawable/rounded_top_corners_selected" /> 
<item android:state_selected="true" android:drawable="@drawable/rounded_top_corners_selected" /> 
<item android:drawable="@drawable/rounded_top_corners" /> 

形狀,未被選定頂級項目(@繪製/ rounded_top_corners):

<shape xmlns:android="http://schemas.android.com/apk/res/android"> 
<solid android:color="@color/entry_background"/>  
<corners android:bottomRightRadius="0dp" android:bottomLeftRadius="0dp" 
android:topLeftRadius="5dp" android:topRightRadius="5dp"/> 
</shape> 

這東西的作品,功能上。 BUT,頂部和底部的物品(其具有的形狀抽拉作爲背景,這在上面已經示出)改變其顏色略微在一定條件下:

  • 向下滾動列表,而無需經過抽頭停止滾動
  • 點擊列表中的任何項目後

這些項目的正確顏色只有在滾動結束後不滾動手指而滾動列表時纔會顯示。

可這有什麼可能呢? StateListDrawables呈現可繪製形狀的錯誤?

+0

我做了一些更多的測試,並會真的只與一個國家列表選擇,結合彩色形狀會出現此問題。當只使用彩色形狀或使用簡單顏色的狀態列表時,顏色保持完美。 – manmal 2010-10-30 09:24:35

+0

好的,在此期間,我添加了切換按鈕到項目,還使用狀態列表選擇器(對於圓角)。猜猜看 - 什麼時候頂部和最後一個項目都是脫色的(稍微偏紅),這也適用於那些切換按鈕。這很奇怪.. – manmal 2010-10-30 17:45:10

回答

0

無盡的研究和猜測後,我發現自己的理由:抖動! 通過禁用的狀態下列表選擇抖動,問題神奇地消失:

<selector xmlns:android="http://schemas.android.com/apk/res/android" android:dither="false"> 

似乎抖動在某些條件下僅被施加(如上所述),它是IMHO不預期的行爲,但可治療通過禁用它完全。