2013-05-01 14 views
17

Mam niestandardową komórkę dla Androida ListView. Ta niestandardowa komórka to układ względny z niektórymi widokami w środku. Pomiędzy każdą komórką jest spacja, więc chcę dodać do cienia cień komórek.Jak ustawić cień w każdej komórce ListView?

Przeszukałem witrynę, ale niczego nie znalazłem? Chcę osiągnąć coś podobnego do tego:

enter image description here

Dzięki!

+0

Zawsze zrobić takie rzeczy z grafiką. Najprostszym sposobem dla programisty byłoby zrobienie czegoś bliskiego pożądanemu rozmiarowi, który obejmuje kolor, biały panel i cień. Następnie po prostu umieść go tam.Alternatywnie możesz mieć każdy kawałek - pasek koloru, biały panel i cień jako oddzielne dzieła sztuki i ułożyć je razem w xml. – HalR

+0

Dzięki za odpowiedzi guys! @StephanBranczyk, o co pytam, to jak stworzyć efekt cienia w wierszach. Na załączonym obrazku widać na dole każdego rzędu, że istnieje niewielki efekt cienia ... – Andres

Odpowiedz

37

można zrobić w poniżej dwa sposoby:

  1. zdjęć 9-patch - kliknij link dla zrozumienia 9 łata
  2. Korzystanie warstwy-list - Tworzenie nowego pliku w "Res/rozciągliwej", który zawiera:

    <?xml version="1.0" encoding="utf-8"?> 
        <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
        <item > 
         <shape 
          android:shape="rectangle"> 
           <solid android:color="@android:color/darker_gray" /> 
           <corners android:radius="5dp"/> 
         </shape> 
        </item> 
        <item android:right="1dp" android:left="1dp" android:bottom="2dp"> 
         <shape 
          android:shape="rectangle"> 
           <solid android:color="@android:color/white"/> 
           <corners android:radius="5dp"/> 
         </shape> 
        </item> 
        </layer-list> 
    

Następnie dodać ten plik warstwy listy jako tło w pozycji listy Układ (tj. Linearlayout lub etc ..).

+0

to jest dokładnie to, czego szukałem !! Dziękuję bardzo! – Andres

+0

dzięki .... idealna odpowiedź – nitin

+0

Fajna, druga praca – antongorodezkiy

2

Najprostszym sposobem jest zdecydowanie zbudowanie cienia na 9-plaster. Przykładem jest coś takiego:

Box 9-Patch

To jest sposób większy niż to musi być, jako 9-poprawki, ale chciałem, aby to większy ze względu na przykład na.

1

Nie testowałem jeszcze dokładny scenariusz, ale jest to w jaki sposób dodać przezroczystą rozdzielacz do widoku listy:

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"> 

    <ListView 
    android:id="@+id/android:list" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:divider="@android:color/transparent" 
    android:dividerHeight="4dip"/> 

</LinearLayout> 

To jest to, czego potrzebujesz, jeśli chcesz dodać shadow line programowo.

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle"> 
    <solid android:color="@android:color/transparent" /> 
    <stroke 
     android:layout_marginLeft="10dip" 
     android:layout_marginRight="10dip" 
     android:width="match_content" 
     android:color="@color/black" /> 
    <size android:height="1dp" /> 
</shape> 

Kolor obrysu może nie pojawić się jako czarne, ponieważ jest wykonane na wierzchu warstwy alfa. Dodatkowo, obecnie rysuje cztery boki prostokąta, a nie tylko dolną stronę. (Będę musiał przeprowadzić dalsze badania tych dwóch problemów).

Zobacz tę tutorial, jeśli potrzebujesz pomocy, aby dowiedzieć się, jak połączyć wszystko razem.

2

i zastosować tę layerlist jako tło w układzie elementu listy, Wybrany kolor jest wyłączona ....

<?xml version="1.0" encoding="utf-8"?> 
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item > 
     <shape 
      android:shape="rectangle"> 
       <solid android:color="@android:color/darker_gray" /> 
       <corners android:radius="5dp"/> 
     </shape> 
    </item> 
    <item android:right="1dp" android:left="1dp" android:bottom="2dp"> 
     <shape 
      android:shape="rectangle"> 
       <solid android:color="@android:color/white"/> 
       <corners android:radius="5dp"/> 
     </shape> 
    </item> 
    </layer-list> 
1

Tworzenie layerlist prostokąt spod szczytów i ustawić swojego widoku komórkowego własnego głównego tła kolor w jego pliku XML.

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" > 
    <!--shadow to bottom and right--> 
    <!--by pushing offset from top and left--> 
    <!--then set foreground-color in android:background in xml--> 
    <item 
     android:left="2dp" 
     android:right="0dp" 
     android:top="2dp" 
     android:bottom="0dp"> 
     <shape 
      android:shape="rectangle"> 
      <solid android:color="@android:color/darker_gray" /> 
     </shape> 
    </item> 
</layer-list> 

in your cell.xml: 

<RelativeLayout 
    android:layout_width="match_content" 
    android:layout_height="wrap_content" 
    android:background="@drawable/shadow"> 

    <RelativeLayout 
     android:id="@+id/cell_stuff" 
     android:layout_width="match_content" 
     android:layout_height="match_content" 
     android:background="@android:color/holo_orange_light"> 

     <!--cell stuff--> 

    </RelativeLayout> 

</RelativeLayout> 

LUB all-in-one

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" > 
    <!--shadow to bottom and right--> 
    <!--by pushing offset from top and left--> 
    <item 
     android:left="2dp" 
     android:right="0dp" 
     android:top="2dp" 
     android:bottom="0dp"> 
     <shape 
      android:shape="rectangle"> 
      <solid android:color="@android:color/darker_gray" /> 
     </shape> 
    </item> 
    <!--foreground-color to cover over non-shadow--> 
    <!--need to also offset in opposite direction--> 
    <item 
     android:left="0dp" 
     android:right="2dp" 
     android:top="0dp" 
     android:bottom="2dp"> 
     <shape 
      android:shape="rectangle"> 
      <solid android:color="@android:color/holo_orange_light"/> 
     </shape> 
    </item> 
</layer-list> 

in your cell.xml: 

<RelativeLayout 
    android:layout_width="match_content" 
    android:layout_height="wrap_content" 
    android:background="@drawable/shadow_allinone"> 

    <!--cell stuff--> 

</RelativeLayout> 

enter image description here

Powiązane problemy