layer-list实现阴影效果

原创 2015年11月20日 16:21:50
  • 为控件实现阴影效果,可以有多种方式:

    • 多个drawable层叠在一起(不好的实现是多个View层叠达到多个drawable的层叠效果,相对好的实现是在同一个View钟实现多个drawable的层叠)
    • 自定义view
    • Material Design中设置Z轴的方式
  • 本文的思路是多个drawable叠在一起,但是不额外使用View,通过layer-list可以将多个item按照顺序层叠在一起显示。首先来看效果图:

LayerShadow

  • 第一个和第二个控件是用来展示layer-list实现阴影效果的基本款,而第三个控件是综合上述两个控件效果,再集合selector实现的。

  • 默认状态:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- 阴影:左偏移2dp,上偏移4dp -->
    <item
        android:left="2dp"
        android:top="4dp">
        <shape>
            <solid android:color="@android:color/holo_blue_dark" />
            <corners android:radius="10dp" />
        </shape>
    </item>
    <!-- 前景::底偏移4dp,右偏移2dp -->
    <item
        android:bottom="4dp"
        android:right="2dp">
        <shape>
            <solid android:color="@android:color/holo_blue_bright" />
            <corners android:radius="10dp" />
        </shape>
    </item>
</layer-list>
  • 点击状态:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- 为了达到点击的真实感,将原来默认状态的前景色设置为阴影,并将前景设为无透明-->
    <item
        android:left="2dp"
        android:top="4dp">
        <shape>
            <solid android:color="@android:color/holo_blue_bright" />
            <corners android:radius="10dp" />
        </shape>
    </item>
    <item
        android:bottom="4dp"
        android:right="2dp">
        <shape>
            <corners android:radius="10dp" />
        </shape>
    </item>
</layer-list>

layer-list的item可以通过以下属性设置偏移量:

  • android:top 顶部的偏移量
  • android:bottom 底部的偏移量
  • android:left 左边的偏移量
  • android:right 右边的偏移量
  • selector,使用上述layer-list:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/layer_list_btn_pressed" android:state_pressed="true" />
    <item android:drawable="@drawable/layer_list_btn_pressed" android:state_selected="true" />
    <item android:drawable="@drawable/layer_list_btn" />

</selector>
  • 最后再来看下,布局代码:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity">

    <TextView
        android:layout_width="100dp"
        android:layout_height="50dp"
        android:background="@drawable/layer_list_btn"
        android:clickable="true"
        android:gravity="center"
        android:text="默认状态" />

    <TextView
        android:layout_width="100dp"
        android:layout_height="50dp"
        android:layout_marginTop="@dimen/activity_vertical_margin"
        android:background="@drawable/layer_list_btn_pressed"
        android:clickable="true"
        android:gravity="center"
        android:text="点击状态" />

    <TextView
        android:layout_width="100dp"
        android:layout_height="50dp"
        android:layout_marginTop="@dimen/activity_vertical_margin"
        android:background="@drawable/selector_btn"
        android:clickable="true"
        android:gravity="center"
        android:text="点我" />
</LinearLayout>
  • 第一个和第二个TextView分别引用了对应的layer-list(默认和点击)作为背景,第三个引用了selector

  • 源码地址

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Android layer-list的属性和使用详解(阴影、边框效果)

layer-list用于多个图层堆叠,可以完成阴影效果

添加阴影布局效果(使用layer-list)实现

要实现这种效果当然有多 种方式,比如背景图片直接加阴影效果,或者用代码画一个(onDraw())。这次我们直接用layer-list来实现。 在项目 res->drawable中创建一个xml,如果...

Android中用layer-list编写阴影效果

应项目需求,需要为ListView中的每个item设置一点阴影效果,参考官方API文档发现可以用layer-list这个东西实现图层覆盖,经试验发现可以实现阴影效果,特此记录下来,供以后再次学习。 ...

使用layer-list实现阴影效果

在drawable下新建background.xml,内容如下

Android中用layer-list编写阴影效果

要实现这种效果当然有多 种方式,比如背景图片直接加阴影效果,或者用代码画一个(onDraw())。这次我们直接用layer-list来实现。在项目 res->drawable中创建一个xml,如果列表...

Android layer-list 圆角阴影背景

1,首先了解一下layer-list中的shapr: 简介作用:XML中定义的几何形状位置:res/drawable/文件的名称.xml 使用的方法:Java代码中:R.drawable.文...

利用layer-list创建阴影效果等

转http://blog.csdn.net/north1989/article/details/53485729 1. layer-list 是啥?有啥作用? 点击查看 安卓官方开发指南中...

如何使用layer-list做出阴影效果

在drawable下新建xml文件                                                                ...

使用selector,shape以及lay-list制作圆形阴影点击效果

之前反编译了百度阅读的xml文件,在res文件夹中找不到其中按钮的背景图片,后来发现他们的一些按钮背景是通过layer-list制作出来的 下面我们就来介绍一下这种制作方法 1、我们都知道要制作点...

layer-list实现阴影和选择器效果

实现这个效果的话,不需要多高深的技术,但是关键是要有耐心和对细节完美的追求。先看效果图: 布局: LinearLayout android:layout_width="18...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:layer-list实现阴影效果
举报原因:
原因补充:

(最多只允许输入30个字)