Android下的Drawable使用
Drawable表示一种可绘制的内容,可以由图片或者颜色组成.Android下的Drawable有BitmapDrawable、GradientDrawable、LayerDrawable等等
1.BitmapDrawable
它表示一张图片,我们可以直接将图片放在drawable目录下,该图片就可以直接作为drawable引用,当然也可以用xml的方式来描述一张图片.
<?xml version="1.0" encoding="utf-8"?>
<bitmap
    xmlns:android="http://schemas.android.com/apk/res/android"
    //图片的路径,必须提供,引用mipmap下的图片是没有提示的,手动补全是可以使用的,不知道为什么
    android:src="@mipmap/miku"
    //抗锯齿,使图片更平滑,开不开都没关系,说实话看不出来差别
    android:antialias="true"
    //抖动效果,在低质量的设备上提供较好的显示效果,推荐true,
    android:dither="true"
    //图片的透明度,取值0.0f~1.0f,0完全透明,1不透明
    android:alpha="1"
    //平铺模式,clamp:底部像素延伸,mirror:水平和竖直镜像平铺,repeat:水平和竖直方向平铺
    //注意:如果设置为ImageView的src属性,则不会出现这些效果,做View的背景才能看到
    android:tileMode="clamp"
    //开启过滤,当图片被拉伸或压缩的时候能保持较好的效果,推荐true
    android:filter="true"
    //对齐方式,当图片的宽高小于容器View的宽高时从哪个方向开始显示,参考TextView的文字对齐方式
    android:gravity="top"
    //色调,99.99%的情况都不需要设置,需要配合tintMode一起使用,不然设置的颜色会挡住图片
    android:tint="#39c5bb"
    //色调模式,取值:multiply、src_over、screen等等,不少取值会遮盖住图片
    android:tintMode="src_over">
</bitmap>
tileMode = "clamp"

tileMode = "repeat"

tileMode = "mirror"

tint = "#39c5bb" + tintMode = "multiply"

2.ShapeDrawable
ShapeDrawable是指在xml文件中的shape标签,实际对应的类是 GradientDrawable,它表示一个图形.
跟BitmapDrawable一致的属性就不详细说明了.
<?xml version="1.0" encoding="utf-8"?>
<shape
    //图形的基本形状,默认是矩形,取值: rectangle、oval,line,ring
    android:shape="rectangle"
    xmlns:android="http://schemas.android.com/apk/res/android"
    >
    //描边,边宽度,边颜色,line和ring必须设置这个,否则无法正常显示
    //dashWidth需要配合dashGap一起使用,两个值都不为0,会显示虚线效果
    <stroke android:width="5dp" android:color="#39c5bb"/>
    //填充色,决定了形状的整体颜色
    <solid android:color="#000"/>
    //指定形状的宽高,未指定size,getIntrinsicWidth()等方法返回-1
    <size android:width="100dp" android:height="100dp"/>
    //可以实现圆角效果的半径,对于矩形,则四个角都会改变,也可以单独设置两个角的圆角效果
    //bottomLeftRadius、bottomRightRadius...
    <corners android:radius="10dp"/>
    //渐变色,该节点和solid冲突,只能有一个,具体效果见下图
    //angle:会影响渐变的方向,该值需要是45的倍数
    //centerColor:渐变的中间色
    //startColor:渐变的起始色
    //endColor:渐变的结束色
    //type:渐变的类型,取值:sweep(扫描渐变,想象一下雷达)、radial(径向渐变)、linear(线性渐变,默认)
    //gradinetRaduis:只有type = "radial"有效,渐变半径
    //useLevel:一般false,作为StateListDrawable为true
    //centerY:渐变中心点的Y坐标,会影响渐变效果
    //centerX:渐变中心点的X坐标,会影响渐变效果
    <gradient android:angle="45" android:centerColor="#f00" android:startColor="#fff" android:endColor="#000"/>
</shape>

3.LayerDrawable
它表示一个拥有层次化的Drawable集合,对应标签是layer-list.它可以包含多个drawable,通过LayerDrawable可以实现一些叠加的效果.
比如:

对于上图的效果要设置给ImageView的src属性才能看到效果.
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    //item 表示一个drawable对象,也可以通过android:drawable属性来引用一个现有drawable对象
    //
    <item>
        //可以设置一个drawable的旋转角度,pivotY,pivotX旋转的偏移量
        <rotate android:fromDegrees="90">
            <shape android:shape="rectangle">
                <solid android:color="#ff0000"/>
                <corners android:radius="10dp"/>
		//这里设置的width和height对于View来说是没有任何意义的,它会按照View的大小来自适应
                <size android:height="20dp" android:width="300dp"/>
            </shape>
        </rotate>
    </item>
    <item>
        <rotate android:fromDegrees="45">
            <shape android:shape="rectangle">
                <solid android:color="#00ff00"/>
                <corners android:radius="10dp"/>
                <size android:height="20dp" android:width="300dp"/>
            </shape>
        </rotate>
    </item>
    <item>
        <rotate android:fromDegrees="135">
            <shape android:shape="rectangle">
                <solid android:color="#0000ff"/>
                <corners android:radius="10dp"/>
                <size android:height="20dp" android:width="300dp"/>
            </shape>
        </rotate>
    </item>
    <item>
        <rotate android:fromDegrees="180">
            <shape android:shape="rectangle">
                <solid android:color="#39c5bb"/>
                <corners android:radius="10dp"/>
                <size android:height="20dp" android:width="300dp"/>
            </shape>
        </rotate>
    </item>
</layer-list>
比较常用的属性有android:left、android:top、android:right、android:bottom,分别表示drawable相对于View的上下左右的偏移量.
待更新...
Android下的Drawable使用的更多相关文章
- Android下OpenCV的环境搭建
		
目录(?)[-] 前言 系统环境 相关工具 Android ADT环境搭建 Android SDK环境变量的配置 Android NDK的安装与配置 OpenCV for Android 环境搭建 基 ...
 - Android的各种Drawable 讲解 大全
		
Android把可绘制的对象抽象为Drawable,不同的图形图像资源就代表着不同的drawable类型.Android FrameWork提供了一些具体的Drawable实现,通常在代码中都不会直接 ...
 - Android下利用Bitmap切割图片
		
在自己自定义的一个组件中由于需要用图片显示数字编号,而当前图片就只有一张,上面有0-9是个数字,于是不得不考虑将其中一个个的数字切割下来,需要显示什么数字,只需要组合一下就好了. 下面是程序的关键代码 ...
 - Android中 Bitmap Drawable Paint的获取、转换以及使用
		
比如Drawable中有一系列连续的图片,img_0.png, img_1.png, img_2.png ... 如果要动态获取这些图片,通过"R.drawable.img_x"的 ...
 - 【原创】窥视懒人的秘密---android下拉刷新开启手势的新纪元
		
小飒的成长史原创作品:窥视懒人的秘密---android下拉刷新开启手势的新纪元转载请注明出处 **************************************************** ...
 - Android中的Drawable和动画
		
Android中Drawable是一种可以在Canvas上进行绘制抽象的概念,种类很多,常见的颜色和图片都可以是一个Drawable.Drawable有很多种,它们表示一种图像的概念,但是它们又不全是 ...
 - android 下 利用webview实现浏览器功能
		
android 下 利用webview实现浏览器功能(一): 1.界面添加WEBVIEW控件. 2.在界面.JAVA代码页面(protected void onCreate(Bundle savedI ...
 - Android实训案例(二)——Android下的CMD命令之关机重启以及重启recovery
		
Android实训案例(二)--Android下的CMD命令之关机重启以及重启recovery Android刚兴起的时候,着实让一些小众软件火了一把,切水果,Tom猫,吹裙子就是其中的代表,当然还有 ...
 - 有关ViewPager的使用及解决Android下ViewPager和PagerAdapter中调用notifyDataSetChanged失效的问题
		
ViewPager是android-support-v4.jar包中的一个系统控件,继承自ViewGroup,专门用以实现左右滑动切换View的效果,使用时需要首先在Project->prope ...
 
随机推荐
- 在C#中使用正则表达式最简单的方式
			
更新记录 本文迁移自Panda666原博客,原发布时间:2021年5月11日. 在.NET中使用正则表达式与其他语言并无太大差异.最简单的使用就是使用Regex类型自带的静态方法. 注意:在.NET中 ...
 - 27.MySQL 索引、事务与存储引擎
			
MySQL 索引.事务与存储引擎 目录 MySQL 索引.事务与存储引擎 MySQL 索引 索引的概念 索引的作用及副作用 索引的作用 索引的副作用 创建索引的原则依据 索引的分类和创建 普通索引 唯 ...
 - 【SpringBoot】YAML 配置文件
			
博客主页:准Java全栈开发工程师 00年出生,即将进入职场闯荡,目标赚钱,可能会有人觉得我格局小.觉得俗,但不得不承认这个世界已经不再是以一条线来分割的平面,而是围绕财富旋转的球面,成为有钱人不是为 ...
 - TypeScript(6)函数
			
函数 函数是 JavaScript 应用程序的基础,它帮助你实现抽象层,模拟类,信息隐藏和模块.在 TypeScript 里,虽然已经支持类,命名空间和模块,但函数仍然是主要的定义行为的地方.Type ...
 - SAP 文件操作类   CL_GUI_FRONTEND_SERVICES
			
1 .文件下载. DATA: l_filename TYPE string, "file name l_path TYPE string, "file path l_fullpat ...
 - 手把手教你实现在Monaco Editor中使用VSCode主题
			
背景 笔者开源了一个小项目code-run,类似codepen的一个工具,其中代码编辑器使用的是微软的Monaco Editor,这个库是直接从VSCode的源码中生成的,只不过是做了一点修改让它支持 ...
 - 关于 k 进制线性基
			
本质还是高斯消元,使其成为上三角矩阵.但是 \(k\) 不一定是质数. 但我们不需要保证已有数字不改变,只要维护的是一个上三角矩阵就行.所以我们可以利用更相减损让其中一个向量的最高位 \(= 0\) ...
 - 攻防世界MISC进阶区 61-63
			
61.肥宅快乐题 得到swf文件,但是用PotPlayer打不开,用浏览器应该可以打开,打开后可以在npc的对话中看到一段base64 解密后就可以得到flag 62.warmup 得到一张png和一 ...
 - 5-20   Web服务器和Nginx
			
什么是Web服务器 简单来说 Web服务器就是一个能够接收http请求并作出响应的java程序 我们再二阶段编写的webServer项目其实就是我们手写的Web服务器 我们现在开发的标准SpringB ...
 - 5-9 Leaf 分布式ID
			
Leaf 什么Leaf leaf是叶子的意思 我们使用的Leaf是美团公司开源的一个分布式序列号(id)生成系统 我们可以在Github网站上下载项目直接使用 为什么需要Leaf 上面的图片中 是一个 ...