您的位置:首页 > 移动开发 > Android开发

Android 用xml定义带阴影的图形

2016-07-19 23:13 537 查看
Android(Android 5之前的版本)在xml定义带阴影的方法的一种是定义一个drawable,用控件层叠样式layer-list结合shape来定义一个背景,然后把这个xml文件当做普通的drawable文件使用就可以了;

但是有一个不足之处在于对于矩形的控件如Textview只能设置上下边的阴影或者左右边的阴影;

layer-如下list文件

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<!-- 第一个item代表的是显示在最底层的背景,另一个item则是前景, -->
<item
android:left="5dp"
android:right="5dp">
<shape
android:shape="rectangle">
<gradient

android:angle="270"
android:startColor="#ffffff"
android:centerColor="#000000"
android:endColor="#ffffff"/>
</shape>
</item>

<!-- top和bottom分别表示前景的上边界和背景的上边界的距离,前景的下边界和背景的下边界之间的距离 -->
<item
android:top="6dp"
android:bottom="6dp"
android:left="5dp"
android:right="5dp">
<shape
android:shape="rectangle">
<solid
android:color="#ffffff" />
</shape>
</item>
</layer-list>
我在主布局文件中,设置了两个TextView,应用上面的背景之后,效果如下



主布局文件如下:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<TextView
android:id="@+id/list_view_text"
android:layout_width="match_parent"
android:layout_height="80dp"
android:textColor="@android:color/black"
android:layout_centerInParent="true"
android:background="@drawable/bg_layer_list"
android:padding="10dp"
android:gravity="center"

android:textSize="24sp"
android:text="test1"
/>

<TextView
android:id="@+id/list_view_text2"
android:layout_width="match_parent"
android:layout_height="80dp"
android:textColor="@android:color/black"
android:layout_centerInParent="true"
android:background="@drawable/bg_layer_list"
android:padding="10dp"
android:gravity="center"
android:layout_marginTop="20dp"
android:layout_below="@id/list_view_text"
android:textSize="24sp"
android:text="test2"
/>
</RelativeLayout>

另一种方式是在android 5.0.1之后出现的新属性elevation,设置这个组件“浮”起来的高度,即可让组件显示3D效果或者使用translationZ设置组件偏离z轴的方向;

<TextView
android:id="@+id/elevation_text"
android:layout_width="150dp"
android:layout_height="80dp"
android:textColor="@android:color/black"
android:layout_centerInParent="true"
android:background="@android:color/white"
android:elevation="15dp"
android:layout_marginTop="30dp"
android:gravity="center"
android:textSize="24sp"
android:text="elevation"/>
<TextView
android:layout_width="150dp"
android:layout_height="80dp"
android:textColor="@android:color/black"
android:translationZ="10dp"
android:translationX="10dp"
android:gravity="center"
android:layout_margin="30dp"
android:layout_centerInParent="true"
android:background="@android:color/white"
android:layout_below="@id/elevation_text"
android:textSize="24sp"
android:text="translation"/>


注意一定要设置背景,不然效果看不出来

效果如下:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息