2017-09-20 107 views
0

我有RecyclerView簡單元素。 RecyclerView元素有2個Textviews。我將可繪製的元素設置爲RecyclerView元素的背景,以在元素的邊上產生陰影效果。在Samsung Galaxy S7上一切正常,但在Lolipop recyclerview的元素面上運行的設備有時會隨機獲得灰色。Android RecyclerView元素陰影背景在LOLIPOP上的奇怪行爲

這是它的外觀上的棒棒糖:

enter image description here

灰色邊框顯示隨機我滾動。

這是我繪製的文件,它提供了陰影效果:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
<item > 
    <layer-list> 
     <item> 
      <shape android:shape="rectangle"> 
       <solid android:color="#01000000" /> 
       <padding 

        android:left="3px" 
        android:right="3px" /> 
      </shape> 
     </item> 
     <item> 
      <shape android:shape="rectangle"> 
       <solid android:color="#02000000" /> 
       <padding 
        android:left="3px" 
        android:right="3px" /> 
      </shape> 
     </item> 
     <item> 
      <shape android:shape="rectangle"> 
       <solid android:color="#03000000" /> 
       <padding 

        android:left="3px" 
        android:right="3px" /> 
      </shape> 
     </item> 
     <item> 
      <shape android:shape="rectangle"> 
       <solid android:color="#04000000" /> 
       <padding 
        android:left="2px" 
        android:right="2px" 
        /> 
      </shape> 
     </item> 
     <item> 
      <shape android:shape="rectangle"> 
       <solid android:color="#06000000" /> 
       <padding 
        android:left="2px" 
        android:right="2px" 
        /> 
      </shape> 
     </item> 
     <item> 
      <shape android:shape="rectangle"> 
       <solid android:color="#06000000" /> 
       <padding 
        android:left="2px" 
        android:right="2px" 
        /> 
      </shape> 
     </item> 
     <item> 
      <shape android:shape="rectangle"> 
       <solid android:color="#07000000" /> 

       <padding 
        android:left="2px" 
        android:right="2px" /> 
      </shape> 
     </item> 
     <item> 
      <shape android:shape="rectangle"> 
       <solid android:color="#08000000" /> 

       <padding 
        android:left="1px" 
        android:right="1px" /> 
      </shape> 
     </item> 
    </layer-list> 
</item> 
<item> 
    <shape android:shape="rectangle"> 
     <solid android:color="#FFF" /> 
     <padding 
      android:left="@dimen/shadow_padding" 
      android:right="@dimen/shadow_padding" /> 
    </shape> 
</item> 
</layer-list> 

RecyclerView元素:

<LinearLayout android:orientation="horizontal" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:weightSum="2" 
android:paddingTop="12dp" 
android:background="@drawable/border_sides" 
android:layout_marginLeft="@dimen/recyclerview_margin" 
android:layout_marginRight="@dimen/recyclerview_margin" 
xmlns:android="http://schemas.android.com/apk/res/android"> 
<TextView 
    android:id="@+id/key" 
    android:layout_width="0dp" 
    android:layout_weight="1.2" 
    android:layout_height="wrap_content" 
    android:fontFamily="sans-serif-medium" 
    android:textColor="@color/colorText" 
    android:textSize="14sp" 
    android:layout_gravity="start" 
    /> 

<TextView 
    android:id="@+id/value" 
    android:layout_width="0dp" 
    android:layout_height="wrap_content" 
    android:layout_weight="0.8" 
    android:layout_gravity="bottom|end" 
    android:textAlignment="textEnd" 
    android:textColor="@color/colorText" 
    android:textSize="14sp" /> 
</LinearLayout> 

有沒有人有想法,爲什麼這是怎麼回事?

+0

使用9補丁繪製的,而不是說' 'drawable – pskink

+0

@pskink任何想法如何生成9patch只有兩側的陰影? –

+0

你爲什麼要「生成」它?只需使用gimp/inkscape/whatever – pskink

回答

0
  1. 切勿使用PX,使用dp代替。 否則,各種設備上的尺寸將因其密度而異
  2. 如果您需要整個RecyclerView的陰影 - 您可以用CardView包裝它。
  3. 對於具有右側和左側使用這種繪製你的項目了一層陰影:
<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:gravity="start"> 
     <shape android:shape="rectangle"> 
      <gradient 
       android:endColor="@android:color/black" 
       android:startColor="@android:color/transparent"/> 
      <size android:width="3dp"/> 
     </shape> 
    </item> 
    <!--margins should be the same as left and right shadow--> 
    <item 
     android:left="3dp" 
     android:right="3dp"> 
     <shape android:shape="rectangle"> 
      <solid android:color="@android:color/white"/> 
     </shape> 
    </item> 
    <item android:gravity="end"> 
     <shape android:shape="rectangle"> 
      <gradient 
       android:angle="180" 
       android:endColor="@android:color/black" 
       android:startColor="@android:color/transparent"/> 
      <size android:width="3dp"/> 
     </shape> 
    </item> 
</layer-list> 

可以隨意更改寬度和漸變色

+0

問題仍然與你的drawable一樣。我認爲底層問題可能是我使用可繪製的透明顏色 –

+0

背景沒有任何問題。添加布局代碼以及ViewHolder –

+0

不想粗魯,但我敢肯定我的代碼很好,我只是想解決lolipop問題。我的代碼在其他操作系統上工作正常,但只是LOLIPOP –