ListView的每个item都像卡片一样摆在界面上,另外每个item下方有3d阴影效果

首先来看我们要实现的效果:ListView的每个item都像卡片一样摆在界面上,另外每个item下方有3d阴影效果ListView的每个item都像卡片一样摆在界面上,另外每个item下方有3d阴影效果_第1张图片


需求明确之后,下面我们就来实现这一效果。

1.为每个item制作阴影以及圆角效果。
    drawable目录下创建card_background.xml
[java] view plain copy
  1. "1.0" encoding="utf-8"?>  
  2. "http://schemas.android.com/apk/res/android" >  
  3.       
  4.       
  5.         "rectangle" >  
  6.             "#CABBBBBB" />  
  7.             "2dp" />  
  8.           
  9.       
  10.     
  11.         android:bottom="2dp"   
  12.         android:left="0dp"  
  13.         android:right="0dp"  
  14.         android:top="0dp">  
  15.         "rectangle" >  
  16.             "@android:color/white" />  
  17.             "2dp" />  
  18.           
  19.       
  20.   

2.为item制作点击后的效果。
 drawable目录下创建card_state_pressed.xml

[java] view plain copy
  1. "1.0" encoding="utf-8"?>  
  2. "http://schemas.android.com/apk/res/android" >  
  3.       
  4.         "rectangle" >  
  5.             "#ca39883d" />  
  6.             "2dp" />  
  7.           
  8.       
  9.     
  10.         android:bottom="2dp"  
  11.         android:left="0dp"  
  12.         android:right="0dp"  
  13.         android:top="0dp">  
  14.         "rectangle" >  
  15.             "#ca4fbb5f" />  
  16.             "2dp" />  
  17.           
  18.       
  19.   

3.定义一个selector。
       drawable目录下创建card_background_selector.xm

[java] view plain copy
  1. "1.0" encoding="utf-8"?>  
  2. "http://schemas.android.com/apk/res/android" >  
  3.     "@drawable/card_state_pressed" android:state_pressed="true" />  
  4.     "@drawable/card_background" />  
  5.   

4.定义item布局。
    layout目录下创建list_item_card.xml文件.
这里需要注意的是根布局为FrameLayout,并且需要给其加上左右的padding,因为这是卡片。另外LinearLayout需设置background,即为上面那个selector。
[java] view plain copy
  1. "1.0" encoding="utf-8"?>  
  2.     xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:layout_width="match_parent"  
  4.     android:layout_height="wrap_content"  
  5.     android:paddingLeft="15dp"  
  6.     android:paddingRight="15dp"  
  7.     android:descendantFocusability="beforeDescendants">  
  8.     
  9.         android:orientation="vertical"  
  10.         android:layout_width="match_parent"  
  11.         android:layout_height="wrap_content"  
  12.         android:paddingLeft="15dp"  
  13.         android:paddingTop="15dp"  
  14.         android:paddingBottom="15dp"  
  15.         android:paddingRight="15dp"  
  16.         android:background="@drawable/card_background_selector"  
  17.         android:descendantFocusability="afterDescendants">  
  18.         
  19.             android:id="@+id/line1"  
  20.             android:layout_width="wrap_content"  
  21.             android:layout_height="wrap_content"  
  22.             android:text="Text"/>  
  23.       
  24.   

5.创建主布局.
layout目录下新建activity_main.xml.
需要注意的是要设置listView的divider属性为@null,dividerHeight为两个卡片的距离。

[java] view plain copy
  1. "1.0" encoding="utf-8"?>  
  2.     xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:orientation="vertical"  
  4.     android:layout_width="match_parent"  
  5.     android:layout_height="match_parent"  
  6.     android:background="#e2e4fe">  
  7.     
  8.         android:id="@+id/card_listView"  
  9.         android:layout_width="match_parent"  
  10.         android:layout_height="match_parent"  
  11.         android:listSelector="@android:color/transparent"  
  12.         android:cacheColorHint="@android:color/transparent"  
  13.         android:divider="@null"  
  14.         android:dividerHeight="10dp" />  
  15.   

6.为listView填充数据.
[java] view plain copy
  1. public class MainActivity extends Activity  
  2. {  
  3.     private ListView listView;  
  4.     private static final String[] data = { "北京""上海""武汉""广州""西安""南京""合肥","上海""武汉""广州""西安""南京""合肥" };  
  5.     @Override  
  6.     public void onCreate(Bundle savedInstanceState)  
  7.     {  
  8.         super.onCreate(savedInstanceState);  
  9.         setContentView(R.layout.activity_main);  
  10.         listView = (ListView) findViewById(R.id.card_listView);  
  11.         /*添加头和尾*/  
  12.         listView.addHeaderView(new View(this));  
  13.         listView.addFooterView(new View(this));  
  14.         listView.setAdapter(new ArrayAdapter(this, R.layout.list_item_card, R.id.line1, data));  
  15.                   
  16.     }  



你可能感兴趣的:(ListView的每个item都像卡片一样摆在界面上,另外每个item下方有3d阴影效果)