Android的各种Drawable详解

Android Drawable - Shape Drawable使用详解(附图) 如有问题或者疑问,可以邮件mkosto@foxmail.com 阅读详情

概述

android内置了如下几种Drawable类型:ColorDrawable、GradientDrawable、BitmapDrawable、 NinePatchDrawable、InsetDrawable、ClipDrawable、ScaleDrawable、 RotateDrawable、AnimationDrawable、LayerDrawable、LevelListDrawable、 StateListDrawable、TransitionDrawable
ShapeDrawable。
      Android把可绘制的对象抽象为Drawable,不同的图形图像资源就代表着不同的drawable类型。Android FrameWork提供了一些具体的Drawable实现,通常在代码中都不会直接接触Drawable的实现类。

ColorDrawable

ColorDrawable通常设置在colors.xml文件中,比如设置View背景为纯色,实际设置的就是ColorDrawable
  public void setBackgroundColor(@ColorInt int color) {
        if (mBackground instanceof ColorDrawable) {
            ((ColorDrawable) mBackground.mutate()).setColor(color);
            computeOpaqueFlags();
            mBackgroundResource = 0;
        } else {
            setBackground(new ColorDrawable(color));
        }
    }

GradientDrawable通常用来设置渐变色。

写在XML文件中通常和shape结合使用
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <gradient
        android:startColor="#FFF"
        android:endColor="#000"
        android:angle="45" />
</shape>

GradientDrawable的构造函数:public GradientDrawable(GradientDrawable.Orientation orientation, int[] colors)

BitmapDrawable

BitmapDrawable就不多介绍什么了,最常用的从drawable中加载的图片都是BitmapDrawable

NinePatchDrawable

NinePatchDrawable是点九图片,NinePatchDrawable绘画的是一个可以伸缩的位图图像。Android会自动调整大小来容纳显示的内容,通常用来做可以被拉伸的背景。

InsetDrawable 

InsetDrawable 表示一个drawable嵌入到另外一个drawable内部,并且在内部留一些间距,这一点很像drawable的padding属性,区别在于 padding表示drawable的内容与drawable本身的边距,insetDrawable表示两个drawable和容器之间的边距。当控件需要的背景比实际的边框小的时候比较适合使用InsetDrawable。

ClipDrawable

ClipDrawable是通过设置一个Drawable的当前显示比例来裁剪出另一张Drawable,你可以通过调节这个比例来控制裁剪的宽高,以及裁剪内容占整个容器的权重,通过ClipDrawable的setLevel()方法调节显示比例可以实现类似Progress进度条的效果。ClipDrawable的level值范围在[0,10000],level的值越大裁剪的内容越少,如果level为10000时则完全显示。
<?xml version="1.0" encoding="utf-8"?>
 <clip
 xmlns:android="http://schemas.android.com/apk/res/android"
 android:drawable="@drawable/drawable_resource"
 android:clipOrientation=["horizontal" | "vertical"]
 android:gravity=["top" | "bottom" | "left" | "right" | "center_vertical" |
                  "fill_vertical" | "center_horizontal" | "fill_horizontal" |
                  "center" | "fill" | "clip_vertical" | "clip_horizontal"] />
clip元素中只有android:drawable、android:clipOrientation和android:gravity三个属性,其中android:drawable为需要裁剪的原始图片,android:clipOrientation为裁剪的方向,可以按照垂直(vertical)或者水平(horizontal)方向进行裁剪,android:gravity为指定从哪里开始裁剪,这个可以通过或操作设置多个属性。

AnimationDrawable

AnimationDrawable通常是将几张图串起来做一个简单动画,
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="false" >
    <item
        android:drawable="@drawable/on_001"
        android:duration="100"/>
    <item
        android:drawable="@drawable/on_002"
        android:duration="100"/>

    <item
        android:drawable="@drawable/on_003"
        android:duration="100"/>
    <item
        android:drawable="@drawable/on_004"
        android:duration="100"/>
    <item
        android:drawable="@drawable/on_005"
        android:duration="100"/>
    <item
        android:drawable="@drawable/on_006"
        android:duration="100"/>
</animation-list>

ScaleDrawable

ScaleDrawable,RotateDrawable分别用来对图片进行拉伸和旋转。

LayerDrawable

一个LayerDrawable是一个可以管理一组drawable对象的drawable。在LayerDrawable的drawable资源按照列表的顺序绘制,列表的最后一个drawable绘制在最上层。
元素:<layer-list>必须的。 并且要作为根节点。 包含一个或者多个<item>元素
属性:xmlns:android 必须的。 定义xml文件的命名空间,必须是 "http://schemas.android.com/apk/res/android"。
<item>定义一个drawable放置在layer drawable中,具体的位置有它的。必须是<selector>的子元素(这个不太理解)。可接受<bitmap>做为子元素
属性:
android:drawable  Drawable资源。必须的。引用的drawable资源
android:id  资源ID。一个为这个item定义的唯一的资源ID。 使用:"@+id/name".这样的方式。可以检索或修改这个drawable通过下面的方式:View.findViewById() orActivity.findViewById().
android:top   Integer。与top的距离,单位像素
android:right  Integer。与right的距离,单位像素
android:bottom  Integer。与bottom的距离,单位像素
android:left  Integer。与left的距离,单位像素
在默认的情况下,所有的drawable item都会缩放到合适的大小来适应视图。因此,在一个layer-list中定义不同的位置可能会增加视图的尺寸和被自动缩放。为了避免被缩放,可以再<item>节点里加上<bitmap>元素来指定一个drawable,并且定义一些不会被拉伸的gravity属性,例如center。
举个例子,下面在item里面定义一个drawable,图片就会自动缩放以适应视图的大小。
<item android:drawable="@drawable/image" />
为了避免缩放,可以使用<bitmap>的子元素来指定drawable资源
<item>
  <bitmap android:src="@drawable/image"
          android:gravity="center" />
</item>

StateListDrawable

StateListDrawable通常用作selector,设置不同的背景或者颜色。ShapeDrawable定义了多种图形,也是比较常用的。

LevelListDrawable

LevelListDrawable对应于<level-list标签>,跟selector一样,它也表示一个drawable集合。使用方法如下。

<?xml version="1.0" encoding="utf-8level_drawable"?>  
<level-list  
    xmlns:android="http://schemas.android.com/apk/res/android">  
    <item   
        android:drawable="@drawable/ic_launcher"  
        android:maxLevel="0"/>  
      
    <item   
        android:drawable="@drawable/icon1"  
        android:maxLevel="1"/>  
</level-list>  

<ImageView  
        android:id="@+id/cv"  
        android:layout_width="wrap_content"  
        android:layout_height="wrap_content"  
        android:layout_margin="20dp"   
        android:src="@drawable/level_drawable"/>  

注意这里要用src,background是不起作用的。
需要变换图片时,调用这个方法iView.setImageLevel(1);

TransitionDrawable

一个TransitionDrawable是一个特殊的Drawable对象,可以实现两个drawable资源之间淡入淡出的效果。

<transition>节点下的每个<item>代表一个drawable资源。只能有两个<item>。先前转换调用startTransition()。向后,调用 reverseTransition()。

文件位于:
res/drawable/filename.xml
文件名作为资源ID
编译资源类型:
指向 TransitionDrawable的指针
资源引用:
In Java: R.drawable.filename
In XML: @[package:]drawable/filename
语法:
<?xml version="1.0" encoding="utf-8"?>
<transition
xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
        android:drawable="@[package:]drawable/drawable_resource"
        android:id="@[+][package:]id/resource_name"
        android:top="dimension"
        android:right="dimension"
        android:bottom="dimension"
        android:left="dimension" />
</transition>
例子:
XML文件保存为:res/drawable/transition.xml:
<?xml version="1.0" encoding="utf-8"?>
<transition xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/on" />
    <item android:drawable="@drawable/off" />
</transition>

在layout文件中使用:

<ImageButton
    android:id="@+id/button"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:src="@drawable/transition" />

ImageButton button = (ImageButton) findViewById(R.id.button);
TransitionDrawable drawable = (TransitionDrawable) button.getDrawable();
drawable.startTransition(500);



欢迎扫描二维码,关注公众号


Android中ColorDrawable的使用 如果你有任何问题,请随时向我提问。在上面的代码中,我们创建了一个ColorDrawable对象,并将背景色设置为蓝色。然后,我们通过getWindow().getDecorView().getRootView()方法获取到根布局的引用,最后将ColorDrawable对象设置为根布局的背景。在本文中,我将介绍ColorDrawable的使用方法,并提供相应的源代码示例。在上面的代码中,我们将ColorDrawable设置为ImageView的背景,这样ImageView的背景色就会变成我们所设置的颜色。 阅读详情

相关推荐

Android使用TransitionDrawable渐变切换多张图片

使用TransitionDrawable渐变切换多张图片,供大家参考,具体内容如下 1、定义变量 private int change = 0;//记录下标 private int[] ids = new int[]{R.drawable.anim_one, R.drawable.anim_two, R.drawable.anim_three}; private Drawable[] drawables;//图片集合 private Thread mThread;//线程 private boolean mThreadFlag = true;//线程结束标志符 2、填充图片 privat

详解Android 13种 Drawable的使用方法

关于自定义View,相信大家都已经很熟悉了。今天,我想分享一下关于自定义View中的一部分,就是自定义Drawable。Drawable 是可绘制对象的一个抽象类,相对比View来说,它更加的纯粹,只用来处理绘制的相关工作而不处理与用户的交互事件,所以适合用来处理背景的绘制。在介绍自定义Drawable前,我们先来学习一下几种常见的Drawable。

金戈鐡馬 9708

SAP ABAP MIGO增强实战:自定义页签与字段的完整实现指南

本文详细介绍了SAP ABAP中MIGO增强的实战指南,包括自定义页签与字段的完整实现步骤。通过BADI增强技术,开发者可以快速满足企业个性化需求,如添加供应商批次号等特殊字段。文章涵盖数据存储结构设计、BADI框架实现、核心方法编写及数据持久化方案,帮助用户高效完成MIGO屏幕增强开发。

study的专栏 773

ColorDrawable类

1,ColorDrawable介绍 【1】ColorDrawable 是最简单的Drawable,它实际上是代表了单色可绘制区域,它包装了一种固定的颜色,当ColorDrawable被绘制到画布的时候会使用颜色填充Paint,在画布上绘制一块单色的区域。 【2】在xml文件中对应<color>标签,它只有一个android:color属性,通过它来决定ColorDrawa...

Cricket_7的博客 475

EPICS Phoebus手册1

EPICS客户端phoebus 手册

yuyuyuliang00的博客 3950

Abaqus 单元与全局刚度矩阵导出实战指南:从INP修改到结果解析

本文提供了Abaqus中导出单元刚度矩阵和全局刚度矩阵的完整实战指南。通过详细步骤讲解INP文件修改、关键指令插入及结果文件解析,帮助工程师、研究人员和二次开发者深入理解有限元软件内核,实现理论验证、二次开发与深度问题调试。

k8s6orchestrator的博客 898

Android的ColorDrawable源码解析

ColorDrawable源码分析 主要从一些常用方法诸如setColorFilter/draw/mutate.newDrawable方法和内部类ColorState几个方面去了解该类的作用,并进行简单的实践。

SEUXXD的博客 654

【物联网技术】ESP8266 ESP-01/01s 固件下载烧录+STM32串口通信接线

ESP8266 ESP-01/01s 工作模式接线与MQTT固件下载烧录接线

嵌入式阿齐Archie 3万+

Android Drawable 详解

详细介绍了 Android 中一些常用 Drawable 的使用方法。

牧秦丶 2万+

【YOLO11改进 - 注意力机制】SCSA通过结合空间注意力和通道注意力,提高各种下游视觉任务的性能。

【YOLO11改进 - 注意力机制】SCSA通过结合空间注意力和通道注意力,提高各种下游视觉任务的性能。

专注于图像领域,主要研究内容包括计算机视觉和深度学习,特别是在图像分类、目标检测和图像生成等方面有深入的研究和实践经验。 473

基于深度学习的茶叶等级检测识别系统:YOLOv8 + UI界面 + 数据集完整实现

随着深度学习技术的不断进步,基于计算机视觉的茶叶等级检测系统可以大大提高检测效率,提供客观一致的评估标准。本系统将利用YOLOv8进行茶叶等级的检测与识别,通过图形用户界面(UI)实现与用户的交互,提供茶叶等级分类的实时反馈。本文将详细介绍如何使用YOLOv8结合UI界面,建立一个完整的茶叶等级检测与识别系统,包括数据集的准备、模型的训练、UI的设计及完整的代码实现。本系统的目标是通过深度学习技术,结合YOLOv8模型和图形用户界面(UI),实现对茶叶等级的自动化检测与识别。

YOLO 972

Android安卓drawable使用详解

跳转链接: 点击跳转

ruiruiddd的博客 381

[Dify] 法律文档解析助手怎么做才敢用?先把条款提取、依据核对和人工复核分开

这篇文章围绕用 Dify 搭建法律文档解析助手时最容易被忽略的可靠性问题展开:文档能上传、模型能总结,并不等于结果就能直接用于法务判断。文章会从文档抽取、条款定位、召回片段核对、结构化输出和人工复核几个角度梳理设计思路,适合正在用 Dify 处理合同、制度、招投标文件或企业知识库问答的读者阅读。

技术小甜甜:传播可落地技术,帮助个人和企业降低解决真实场景问题的成本 9379

详解Android Drawable

详解Android Drawable

oyyming的博客 4209

STM32 IIC电量计LTC2944

LTC2944是一款电池电量计,设计用于端电压为3.6V至60V的多节电池。它测量电池充电和放电、电池电压、电流和自身温度。精密模拟库仑计数器通过电池正极端子与负载或充电器之间的检测电阻器对电流进行积分。电池电压、电池电流和硅温度由内部ADC测量。

baidu_34971492的博客 3160

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

android的Drawable详解

Drawable简介Drawable有很多种,用来表示一种图像的概念,但他们又不完全是图像,他们是用过颜色构建出来的各种图像的表现形式。Drawable一般都是通过xml来定义的 ,当然我们也可以通过代码来创建,Drawable是一个抽象的类,是所以Drawable的基类,每个具体的Drawable都是它的子类,如ShapeDrawable,BitmapDrwable等,其结构如下图:Drawab

xiangzhihong8的专栏 2428

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

android drawable转bitmap_Drawable 使用详解

阅读五分钟,每日十点,和您一起终身学习,这里是程序员AndroidDrawable 是Android 中图像显示的常用方法。概念:Drawable是指可在屏幕上绘制的图形,已经通过getDrawable(int)等API检索或者应用到具有 android:drawable 和 android:icon 等属性的其他XML 资源的图形。本篇文章主要介绍 Android 开发中的部分知识点,通过阅读本...

weixin_39518840的博客 768

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

android drawable 对象,Android中的各种Drawable类详解

Drawable简介图形图像的绘制需要在画布上进行操作和处理,但是绘制需要了解很多细节以及可能要进行一些复杂的处理,这样就会增加学习和使用的成本,因此系统提供了一个被称之为Drawable的类来进行绘制处理。通过这个类可以减少我们的绘制工作和使用成本,同时系统也提供了众多的Drawable的派生类比如单色、图形、位图、裁剪、动画等等来完成一些常见的绘制需求。Drawable是一个抽象的可绘制类。他...

weixin_34024555的博客 793

Android Drawable 目录下的 XML 图形文件详解

4个角(不拉伸)4条边(单向拉伸)1个中心区域(双向拉伸)

百锦再的博客 1万+

Android Drawable - Scale Drawable使用详解(附图)

一个可以根据自己的level等级, 将指定的Drawable缩放到一定比例资源放置位置:   Eclipse/AS: res/drawable/filename.xml引用用法:   In Java: R.drawable,filename   In XML: @drawable/filename语法:<?xml version="1.0" encoding="utf-8"?> <scale

shibin1990_的博客 4985

android xml opacity,Android Drawable详解

前言Drawable就是一个可画的对象,表示一种可以在Canvas上进行绘制的抽象的概念,其可能是一张(BitmapDrawable),也可能是一个图形(ShapeDrawable),还有可能是一个图层(LayerDrawable),我们根据画图的需求,创建相应的可画对象,就可以将这个可画对象当作一块“画布(Canvas)”,在其上面操作可画对象,并最终将这种可画对象显示在画布上,有点类似于“内存...

weixin_39551188的博客 362

Android中Drawable分类汇总详解

本文为欧阳鹏原创文章,欢迎转载,转载请注明出处! http://blog.youkuaiyun.com/ouyang_peng Android把可绘制的对象抽象为Drawable,不同的图形图像资源就代表着不同的drawable类型。Android FrameWork提供了一些具体的Drawable实现,通常在代码中都不会直接接触Drawable的实现类。      

kanghaorong的博客 1793

android中Drawable方法详解

常用的drawable方法总结,在网上收集了好久。

h55l55的专栏 4937
上一篇: JAVA并发编程(一)JAVA线程池的使用
下一篇: Activity启动过程源码分析
robert_chao
博客等级 码龄15年 265粉丝 119原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值