当前位置: 首页 > news >正文

Android——shape和selector和layer-list的(详细说明 转)

<shape>和<selector>在Android UI设计中经常用到。比如我们要自定义一个圆角Button,点击Button有些效果的变化,就要用到<shape>和<selector>。
可以这样说,<shape>和<selector>在美化控件中的作用是至关重要。

在看这篇文章之前,可以看下这个小例子:镂空按钮的实现

1.Shape
简介

作用:XML中定义的几何形状

位置:res/drawable/文件的名称.xml

使用的方法:

Java代码中:R.drawable.文件的名称

XML中:Android:background="@drawable/文件的名称"

属性:

<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/文件的名称.xml

使用的方法:
Java代码中:R.drawable.文件的名称
XML中:Android:background="@drawable/文件的名称"
<?xml version="1.0" encoding="utf-8" ?>       
<selector xmlns:Android="http://schemas.android.com/apk/res/android">     
<!-- 默认时的背景图片-->      
<item Android:drawable="@drawable/pic1" />        
<!-- 没有焦点时的背景图片 -->      
<item   
   Android:state_window_focused="false"        
   android:drawable="@drawable/pic_blue"   
   />       
<!-- 非触摸模式下获得焦点并单击时的背景图片 -->      
<item   
   Android:state_focused="true"   
   android:state_pressed="true"     
   android:drawable= "@drawable/pic_red"   
   />     
<!-- 触摸模式下单击时的背景图片-->      
<item   
   Android:state_focused="false"   
   Android:state_pressed="true"     
   Android:drawable="@drawable/pic_pink"   
   />      
<!--选中时的图片背景-->      
<item   
   Android:state_selected="true"   
   android:drawable="@drawable/pic_orange"   
   />       
<!--获得焦点时的图片背景-->      
<item   
   Android:state_focused="true"   
   Android:drawable="@drawable/pic_green"   
   />       
</selector>   
3.layer-list   
简介:
将多个图片或上面两种效果按照顺序层叠起来
例子:
<?xml version="1.0" encoding="utf-8"?>  
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">  
    <item>  
      <bitmap android:src="@drawable/android_red"  
        android:gravity="center" />  
    </item>  
    <item android:top="10dp" android:left="10dp">  
      <bitmap android:src="@drawable/android_green"  
        android:gravity="center" />  
    </item>  
    <item android:top="20dp" android:left="20dp">  
      <bitmap android:src="@drawable/android_blue"  
        android:gravity="center" />  
    </item>  
</layer-list>  
<ImageView  
    android:layout_height="wrap_content"  
    android:layout_width="wrap_content"  
    android:src="@drawable/layers" />  

效果图:

 

 

4.最后

以上三个标签可以揉合到一块儿来使用,所要实现的效果就是上面三种标签的说明,比如下面这个例子:

<selector xmlns:android="http://schemas.android.com/apk/res/android">  
    <item android:state_pressed="true">  
        <layer-list>  
            <item android:bottom="8.0dip">  
                <shape>  
                    <solid android:color="#ffaaaaaa" />  
                </shape>  
            </item>  
            <item>  
                <shape>  
                    <corners android:bottomLeftRadius="4.0dip" android:bottomRightRadius="4.0dip" android:topLeftRadius="1.0dip" android:topRightRadius="1.0dip" />  
  
                    <solid android:color="#ffaaaaaa" />  
  
                    <padding android:bottom="1.0dip" android:left="1.0dip" android:right="1.0dip" android:top="0.0dip" />  
                </shape>  
            </item>  
            <item>  
                <shape>  
                    <corners android:bottomLeftRadius="3.0dip" android:bottomRightRadius="3.0dip" android:topLeftRadius="1.0dip" android:topRightRadius="1.0dip" />  
  
                    <solid android:color="@color/setting_item_bgcolor_press" />  
                </shape>  
            </item>  
        </layer-list>  
    </item>  
    <item>  
        <layer-list>  
            <item android:bottom="8.0dip">  
                <shape>  
                    <solid android:color="#ffaaaaaa" />  
                </shape>  
            </item>  
            <item>  
                <shape>  
                    <corners android:bottomLeftRadius="4.0dip" android:bottomRightRadius="4.0dip" android:topLeftRadius="1.0dip" android:topRightRadius="1.0dip" />  
  
                    <solid android:color="#ffaaaaaa" />  
  
                    <padding android:bottom="1.0dip" android:left="1.0dip" android:right="1.0dip" android:top="0.0dip" />  
                </shape>  
            </item>  
            <item>  
                <shape>  
                    <corners android:bottomLeftRadius="3.0dip" android:bottomRightRadius="3.0dip" android:topLeftRadius="1.0dip" android:topRightRadius="1.0dip" />  
  
                    <solid android:color="@color/setting_item_bgcolor" />  
                </shape>  
            </item>  
        </layer-list>  
    </item>  
</selector>  

 

相关文章:

  • ajax的兼容问题
  • 对象管理器(defineProperty)学习笔记
  • ajax的登录页面,发送post方式
  • AHK 中 = 和 == 等比较运算符的用法
  • nodejs的简单分析理解
  • NPM的操作步骤
  • Zabbix监控Windows主机
  • promise解决回调地狱的方法之一
  • HTML5的兼容性测试
  • 为了Cisco UC,36年来家中第一次安装固话
  • 链式调用和解决回调地狱的终极解决方法async,await
  • jquery的使用
  • 探究JVM——垃圾回收
  • jQuery的节点操作
  • 大数据计算新贵Spark在腾讯雅虎优酷成功应用解析
  • 分享的文章《人生如棋》
  • avalon2.2的VM生成过程
  • create-react-app项目添加less配置
  • ES6, React, Redux, Webpack写的一个爬 GitHub 的网页
  • java小心机(3)| 浅析finalize()
  • React组件设计模式(一)
  • Vue官网教程学习过程中值得记录的一些事情
  • windows下使用nginx调试简介
  • 分布式熔断降级平台aegis
  • 基于Dubbo+ZooKeeper的分布式服务的实现
  • 前端代码风格自动化系列(二)之Commitlint
  • 前嗅ForeSpider教程:创建模板
  • 实现菜单下拉伸展折叠效果demo
  • 腾讯大梁:DevOps最后一棒,有效构建海量运营的持续反馈能力
  • 问:在指定的JSON数据中(最外层是数组)根据指定条件拿到匹配到的结果
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • 智能网联汽车信息安全
  • # 达梦数据库知识点
  • (1)SpringCloud 整合Python
  • (10)STL算法之搜索(二) 二分查找
  • (12)Linux 常见的三种进程状态
  • (2020)Java后端开发----(面试题和笔试题)
  • (22)C#传智:复习,多态虚方法抽象类接口,静态类,String与StringBuilder,集合泛型List与Dictionary,文件类,结构与类的区别
  • (附源码)ssm高校实验室 毕业设计 800008
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (理论篇)httpmoudle和httphandler一览
  • (强烈推荐)移动端音视频从零到上手(上)
  • (十六)一篇文章学会Java的常用API
  • (一)Mocha源码阅读: 项目结构及命令行启动
  • (中等) HDU 4370 0 or 1,建模+Dijkstra。
  • (转)一些感悟
  • (转载)Google Chrome调试JS
  • .NET Core MongoDB数据仓储和工作单元模式封装
  • .net 重复调用webservice_Java RMI 远程调用详解,优劣势说明
  • .net操作Excel出错解决
  • .net开发时的诡异问题,button的onclick事件无效
  • .net企业级架构实战之7——Spring.net整合Asp.net mvc
  • @ 代码随想录算法训练营第8周(C语言)|Day53(动态规划)
  • @Data注解的作用
  • @NoArgsConstructor和@AllArgsConstructor,@Builder