1.Shape
简介
作用:XML中定义的几何形状
位置:res/drawable/文件的名称.xml
使用的方法:
Java代码中:R.drawable.fileName
XML中:android:background="@drawable/fileName"
或:android:src="@drawable/fileName"
属性
<shape>android:shape=["rectangle"|"oval"|"line"|"ring"]
其中rectagle矩形,oval椭圆,line水平直线,ring环形
<shape>中子节点的常用属性:
<gradient>渐变
android:startColor
起始颜色
android:endColor
结束颜色
android:angle
渐变角度,0从左到右,90表示从下到上,数值为45的整数倍,默认为0;
android:type
渐变的样式liner线性渐变radial环形渐变sweep
<solid>填充
android:color
填充的颜色
<stroke>描边
android:width
描边的宽度
android:color
描边的颜色
android:dashWidth
表示'-'横线的宽度
android:dashGap
表示'-'横线之间的距离
<corners>圆角
android:radius
圆角的半径值越大角越圆
android:topRightRadius
右上圆角半径
android:bottomLeftRadius
右下圆角角半径
android:topLeftRadius
左上圆角半径
android:bottomRightRadius
左下圆角半径
<padding>填充
android:bottom="1.0dip"
底部填充
android:left="1.0dip"
左边填充
android:right="1.0dip"
右边填充
android:top="0.0dip"
上面填充
2.Selector
简介
根据不同的选定状态来定义不同的现实效果
分为四大属性:
android:state_selected是选中
android:state_focused是获得焦点
android:state_pressed是点击
android:state_enabled是设置是否响应事件,指所有事件
另:
android:state_window_focused默认时的背景图片
引用位置:res/drawable/fileName
使用的方法:
Java代码中:R.drawable.fileName
XML中:android:background="@drawable/fileName"
或:android:src="@drawable/fileName"
3.layer-list
简介
作用:将多个item叠层
Java代码中:R.drawable.fileName
XML中:android:background="@drawable/fileName"
或:android:src="@drawable/fileName"
说完了它们的基本用简介和属性,下面来直接列几个例子:
white_bg_solid.xml 画的是一个叠层后显示为:四个圆角的一张背景图
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<!--第一层 连框颜色值 -->
<item>
<shape>
<solid android:color="#B2B2B2" />
<corners
android:bottomLeftRadius="6dp"
android:bottomRightRadius="6dp"
android:topLeftRadius="6dp"
android:topRightRadius="6dp" />
</shape>
</item>
<!-- 第二层 主体背景颜色值 -->
<item android:bottom="1dp">
<shape>
<solid android:color="@color/white" />
<corners
android:bottomLeftRadius="6dp"
android:bottomRightRadius="6dp"
android:topLeftRadius="6dp"
android:topRightRadius="6dp" />
<padding
android:bottom="6dp"
android:left="6dp"
android:right="6dp"
android:top="6dp" />
</shape>
</item>
</layer-list>
white_bg_solid_pressed.xml 跟上面的一样,只不过颜色变了,用来做点击色
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<!-- 连框颜色值 -->
<item>
<shape>
<solid android:color="#B2B2B2" />
<corners
android:bottomLeftRadius="6dp"
android:bottomRightRadius="6dp"
android:topLeftRadius="6dp"
android:topRightRadius="6dp" />
</shape>
</item>
<!-- 主体背景颜色值 -->
<item android:bottom="1dp">
<shape>
<solid android:color="#DCDCDC" />
<corners
android:bottomLeftRadius="6dp"
android:bottomRightRadius="6dp"
android:topLeftRadius="6dp"
android:topRightRadius="6dp" />
<padding
android:bottom="6dp"
android:left="6dp"
android:right="6dp"
android:top="6dp" />
</shape>
</item>
</layer-list>
white_bg_top_solid.xml 画的是叠层后显示为:上面两个角为圆角,下面两个直角的一张背景图 ,细节第三层的
android:bottom="0.7dp"(底边立体效果)
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<!-- 第一层 -->
<item>
<shape>
<solid android:color="@color/white" />
<corners
android:bottomLeftRadius="6dp"
android:bottomRightRadius="6dp"
android:topLeftRadius="6dp"
android:topRightRadius="6dp" />
</shape>
</item>
<!-- 第二层 -->
<item android:top="13dp">
<shape>
<solid android:color="@color/space_bg" />
</shape>
</item>
<!-- 第三层 -->
<item android:top="12dp"
android:bottom="0.7dp">
<shape>
<solid android:color="@color/white" />
<padding
android:left="6dp"
android:top="6dp"
android:right="6dp"
android:bottom="6dp"/>
</shape>
</item>
</layer-list>
white_bg_bottom_solid.xml画的是叠层后显示为:上面两个角为直角,下面为两个圆角的一张背景图
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<!-- 第一层 -->
<item>
<shape>
<solid android:color="#B2B2B2" />
<corners
android:bottomLeftRadius="6dp"
android:bottomRightRadius="6dp"
android:topLeftRadius="6dp"
android:topRightRadius="6dp" />
</shape>
</item>
<!-- 第二层 -->
<item android:bottom="12dp">
<shape>
<solid android:color="@color/white" />
</shape>
</item>
<!-- 第三层 主体背景颜色值 -->
<item android:bottom="1dp">
<shape>
<solid android:color="@color/white" />
<corners
android:bottomLeftRadius="6dp"
android:bottomRightRadius="6dp"
android:topLeftRadius="6dp"
android:topRightRadius="6dp" />
<padding
android:bottom="6dp"
android:left="6dp"
android:right="6dp"
android:top="6dp" />
</shape>
</item>
</layer-list>
edit_text._layer.xml 画的是带有带有钩子的文本输入框背景图,类似于微信输入框的效果
<?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="@color/green" />
</shape>
</item>
<item android:bottom="6dp">
<shape android:shape="rectangle" >
<solid android:color="@color/white" />
</shape>
</item>
<!-- 第三层 通过叠层 左下右间距 画钩子 -->
<item
android:bottom="1dp"
android:left="1dp"
android:right="1dp">
<shape android:shape="rectangle" >
<solid android:color="@color/white" />
</shape>
</item>
</layer-list>
white_bg_solid_selector.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:state_pressed="true" android:drawable="@drawable/white_bg_solid_pressed"/>
<item android:drawable="@drawable/white_bg_solid"/>
</selector>
最终测试布局
test.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@color/space_bg" >
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="100dp"
android:layout_margin="10dp"
android:background="@drawable/white_bg_solid_selector">
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/edit_text_layer"
android:hint="@null"
android:padding="4dp"/>
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="100dp"
android:layout_margin="10dp"
android:background="@drawable/white_bg_top_solid"/>
<View
android:layout_width="match_parent"
android:layout_height="100dp"
android:layout_margin="10dp"
android:background="@drawable/white_bg_bottom_solid"/>
</LinearLayout>
好了,例子说完了,想要画什么样的背景图,我们都通过layer-list叠层来拼成背景图,就可以实现我们想要的背景图了。
说了这么半天,来看下效果图:
分享到:
相关推荐
这个“关于XML绘图(bitmap, shape, layer-list, selector, animation)的demo”是Android开发中的一个实例,展示了如何利用XML来创建和控制各种图形元素。下面将详细解释这些概念。 1. **Bitmap**: 在Android中,...
在Android开发中,Shape、Selector和Layer-List是三种非常重要的图形绘制元素,它们主要用于定义View的背景或者自定义按钮、列表项等组件的样式。接下来,我们将详细探讨这三个概念及其应用。 首先,Shape是Android...
在实际应用中,`layer-list` 可以与其它 `Drawable` 类型结合使用,如 `selector` (选择器) 或 `inset` (内嵌),以创建更复杂的视图效果。此外,还可以通过设置 `android:drawable` 属性引用其他资源,实现更灵活的...
在Android开发中,Shape是XML布局文件中的一种元素,它允许开发者自定义各种图形,如矩形、椭圆、线和梯形等,用于创建丰富多彩的背景或按钮样式。本教程将深入探讨如何在Android中使用Shape来实现自定义形状。 1. ...
`layer-list`允许开发者将多个Drawable对象按层次堆叠,从而实现如背景、边框、阴影等各种视觉效果,而无需依赖于特定分辨率的图像资源。 首先,我们来看`layer-list`如何用于实现Tab的背景效果。在示例中,Tab背景...
本文的思路是多个drawable叠在一起,但是不额外使用View,通过layer-list可以将多个item按照顺序层叠在一起显示。首先来看效果图: 第一个和第二个控件是用来展示layer-list实现阴影效果的基本款,而第三个控件是...
`Layer-list`可以与Android的其他drawable资源,如`selector`(状态选择器)和`shape`(形状)等配合使用,以实现更复杂的动态效果。 6. **性能考虑**: 虽然`Layer-list`提供了一种方便的方式来组合图形,但过多...
`Layer-list`还可以与其他`Drawable`类型结合使用,比如`selector`(状态选择器)或者`inset`(内嵌),以实现更复杂的行为。 6. **适配不同屏幕尺寸**: 在`res/drawable`目录下为不同屏幕密度创建相应的`Layer-...
通过使用属性,我们可以为这些组件设置Shape、Selector或Layer-List作为背景。例如,将上面定义的Shape作为按钮的背景: ```xml android:id="@+id/myButton" android:layout_width="wrap_content" android:...
在Android开发中,"闪屏页ShapeDemo"是一个典型的项目,它主要展示了如何利用各种图形元素和动画技术来创建引人注目的启动界面。在这个项目中,开发者将学习到几个关键知识点,包括Shape、Selector、layer_list以及...
总结起来,Android的XML背景定义提供了强大的灵活性,通过`<shape>`、`<layer-list>`和`<selector>`,我们可以创建出各种复杂的背景样式,适应不同的应用场景。在`ShapeDemo`中,你将有机会看到这些技术的实际运用,...
首先,我们需要理解Android中的`<shape>`和`<layer-list>`标签。 `<shape>`标签用于创建各种几何形状,如矩形、椭圆等,并能为其填充颜色、设置边框等。在这个实例中,我们用它来创建带有圆角的矩形,以模拟阴影和...
在Android开发中,Shape是XML布局资源的一种,用于创建各种图形,如矩形、椭圆、线和梯形等,通常用作自定义View的背景或者Drawable对象。它提供了丰富的属性来实现颜色填充、边框样式以及渐变效果,极大地增强了...
`shape`资源也可以作为其他图形的基础,通过`layer-list`或者`selector`进行组合和选择,实现更复杂的布局效果。 ### 9. `kstyle-master`项目 `kstyle-master`可能是一个包含多个`shape`样式的开源项目,用于展示和...
XML资源文件通常位于res/drawable目录下,可以使用shape、selector或layer-list等元素来定义复杂的背景样式。 1. **Shape Drawable**:Shape drawable允许我们创建简单的几何形状作为背景,例如矩形、圆形、线等,...
Shape是Android中一个非常实用的元素,它允许开发者定义自定义的图形样式,包括填充颜色、渐变、描边、圆角以及内部间距等属性,从而实现各种复杂的控件外观。本篇将深入探讨Shape的使用及其在不同场景下的应用。 ...
不同于Web开发中常用的CSS,Android通过一系列特有的资源文件来实现样式定义,其中主要包括`<shape>`、`<selector>`、`<layer-list>`等标签。本文将详细介绍这些概念,并提供具体的使用示例。 #### 一、`<shape>`:...
同时,还可以使用`<layer-list>`来组合多个形状,实现更复杂的效果。 提供的demo程序和文档将帮助你更好地理解这些概念,并通过实践掌握如何在项目中应用。通过尝试修改不同属性,你可以创造出各种各样的形状和渐变...
主要涉及的技术点包括使用Selector、Layer-List以及Shape等XML资源文件。 首先,我们来看`button_ctrl.xml`,这是一个Selector资源文件,用于定义Button在不同状态下的背景。Selector是Android中的一个Drawable类型...
在实际应用中,还可以结合selector来实现点击状态变化的效果,或者使用layer-list来组合多个形状,实现更丰富的视觉效果。 总之,Android的Shape属性是构建自定义UI的重要工具,熟练掌握其用法能帮助开发者创造出...