热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

详解Android中Drawable方法

这篇文章主要为大家详细介绍了Android中Drawable方法,感兴趣的朋友可以参考一下

本文为大家分享了Android中Drawable方法的详细使用方法,供大家参考,具体内容如下

1. BitmapDrawable相关方法:

新建在drawable目录下面,示例如下:

 

具体每个属性的解释如下:

<&#63;xml version="1.0" encoding="utf-8"&#63;>
 

上述的排版方式只是为了方便查看,不能直接复制到代码中使用

2. ShapeDrawable,纯色、渐变色的drawable

基本示例代码:

<&#63;xml version="1.0" encoding="utf-8"&#63;>

  
  
  
  
  
  


各个标签详细说明:

表示图像形状

表示图形形状,有四个选项rectangle(矩形)、oval(椭圆)、line(横线)、ring(圆环),默认是矩形。在使用line和ring时候需要通过stroke属性来指定线的宽度和颜色,否则显示效果将会异常。
当设置ring时,有五个特殊的属性,对应如下:
android:innerRadius——圆环内半径,和innerRadiusRatio同时存在时,以innerRadius为准。
android:thickness——圆环的厚度,及外半径减去内半径
android:innerRAdiusRatio——内半径占整个drawable的宽度比例,默认为9
android:thicknessRadio——厚度咱整个Drawable的比例,默认为3,计算方式为厚度=宽度/n
android:useLevel——一般都应该使用false,除非被当做LevelListDrawable来使用时候

(四个角角度,适用于矩形)

表示shape的四个角的角度。它只试用与矩形,角度值的是圆角的程度,用px来表示。其中radius用来为四个角同意设置角度,优先级比较低。topLeftRadius、topRightRadius、bottomLeftRadius、bottomRightRadius分别表示左上、右上、左下、右下角的角度。

(颜色渐变)

表示渐变填充,它与标签互斥,包含的几个属性值意义如下:
android:angle——渐变角度,默认为零,值必须为45的倍数。
android:centerX——渐变中心点横坐标
android:centerY——渐变中心点纵坐标
android:startColor——渐变起始颜色
android:centerColor——渐变的中间色
android:endColor——渐变的结束色
android:gradientRadius——渐变半径
android:useLevel——一般为false,仅当android:type=”radial”
android:type——渐变的类型,有个linear(线性渐变)、radial(径向渐变)、sweep(扫描线渐变)三种,其中默认为线性渐变

(纯色填充)

通过android:color既可指定shape中填充的颜色

(描边属性)

包含以下常用标签:
android:width——描边的宽度,越大则shape的边缘就会看起来越粗
android:color——描边的颜色
android:dashWidth——组成虚线的线段的宽度
android:dashGap——组成虚线的线段之间的间隔,间隔越大空隙越大

内边距

可以理解为内边距,使用起来和直接在view中加边距类似包含四个属性:android:top、android:bottom、android:left和android:right,分别表示上下左右内边距。

有两个属性android:width和android:height,表示该view的宽高,类似图片本身的宽高,在view中会视情况拉伸。

3. LayerDrawable层次化的Drawable,类似图层

多个drawable的集合,类似图层概念,通过将不同的drawable放置在不同的层上面从而达到一种叠加后的效果,它的语法规则如下:

<&#63;xml version="1.0" encoding="utf-8"&#63;>

  
  
 

一个layer-list可以包含多个item,每个item表示一个drawable。上下左右是个属性表示Drawable相对于view的上下左右偏移量,单位为像素。可以通过drawable来直接引用一个drawable资源。也可以直接在item标签下自定义drawable。
默认情况下,layer-list中所有的drawable都会被缩放到view的大小。layer-list有层次概念,下面的drawable会覆盖上面的drawable。通过合理分层,可以实现一些特殊的叠加效果。

4. StateListDrawable(选择器)

选择器标签,对应的标签是,也是一个drawable的集合,常用来根据当前状态改变颜色。

<&#63;xml version="1.0" encoding="utf-8"&#63;>

  
   
 

注意:如果有多个item,那么程序将自动从上到下进行匹配,最先匹配的将得到应用。(不是通过最佳匹配)如果一个item没有任何的状态说明,那么它将可以被任何一个状态匹配。所以默认的item应该放到最后一条,否则会导致下边的选项没有效果。

5. LevelListDrawable(不同等级切换不同drawable)

LevelListDrawable对应于标签,用来表示一个drawable集合。集合中每一个drawable都一个等级,根据不同的等级,LevelListDrawable会切换为对应的Drawable,具体详情如下:

<&#63;xml version="1.0" encoding="utf-8"&#63;>

  
    
  


6. TransitionDrawable(可实现淡入淡出)

对应的是标签,用于实现两个drawable之间淡入淡出的效果,具体使用方法如下

<&#63;xml version="1.0" encoding="utf-8"&#63;>

  
  


使用方式:

定义渐变

<&#63;xml version="1.0" encoding="utf-8"&#63;>

  
  


将渐变添加到背景



在代码中控制

TextView textView = (TextView)findViewById(R.id.button);
TransitionDrawable drawable = (TransitionDrawable)textView.getBackground();
drawable.startTransition(1000);

7. InsetDrawable(内嵌一个Drawable)

可以将Drawable内嵌到自己内部,并在四周留出空隙,一般用在希望自己背景比自己实际区域小的view中。

<&#63;xml version="1.0" encoding="utf-8"&#63;>

  
 

8. ScaleDrawable(缩放类,可以缩小)

对应的代码如下:

<&#63;xml version="1.0" encoding="utf-8"&#63;>

 

在使用时时候必须设置Drawable的级别,否则无法使用,设置级别的代码如下:

View testScale = findViewById(R.id.test_scale);
scaleDrawable testScaleDrawable = (ScaleDrawable)testScale.getBackground();
testScaleDrawable.setLevel(1);//范围是1~10000,只要不为零就可以

9. ClipDrawable(根据不同设置裁剪Drawable)

可以根据当前等级来裁剪另一个Drawable,具体的代码如下:

<&#63;xml version="1.0" encoding="utf-8"&#63;>

 

top——放置到顶部,如果为竖直裁剪,那么从底部开始裁剪
bottom——放到底部,如果为竖直裁剪,那么从顶部开始裁剪
left——放到左边,如果为水平裁剪,那么从右开始裁剪(此为默认)
right——放到右边,若为水平裁剪,那么从左边开始裁剪
center_vertical——竖直居中,竖直裁剪时,上下同时裁剪
fill_vertical——竖直方向填充,如果为竖直裁剪,仅当clipDrawable等级为0时(此时不可见,为完全裁剪),才有裁剪行为
(水平方向也具有和竖直类似的属性,对应为center_horizontal和fill_horizontal,用法与上面两个类似)
center——中部居中,竖直裁剪时上下同时减,水平裁剪时左右同时减
fill——充满整个drawable,当clipDrawable等级为零时有效
clip_vertical——附加选项,表竖直方向裁剪
clip_horizontal——附加选项,表竖直方向裁剪

使用时候需要在代码中设置等级具体代码如下

ImageViwe testClip = (ImageView)findViewById(R.id.test_clip);
ClipDrawable testClipDrawable = (ClipDrawable)testClip.getDrawable();
//等级为从0到10000,等级0表示完全裁剪,等级10000表示不裁剪
testClipDrawable.setLevel(5000);

以上就是本文的全部内容,希望对大家的学习有所帮助。


推荐阅读
  • Eclipse 中 Maven 的基础配置指南
    本文详细介绍了如何在 Eclipse 环境中配置 Maven,包括环境变量的设置、Maven 插件的安装与配置等关键步骤,旨在帮助开发者顺利搭建开发环境。 ... [详细]
  • ECharts 基础使用指南
    本文档提供了一个简单的 ECharts 使用示例,帮助初学者快速了解如何在网页中集成和使用 ECharts 创建图表。更多详细信息请参阅官方文档:https://www.echartsjs.com/zh/tutorial.html#5%20分钟上手%20ECharts ... [详细]
  • 本文介绍了ADB(Android Debug Bridge)的基本概念、安装方法、环境配置、连接真机步骤以及常用命令和高级技巧。ADB是一个强大的工具,适用于Android设备的开发和调试。 ... [详细]
  • 目录介绍01.CoordinatorLayout滑动抖动问题描述02.滑动抖动问题分析03.自定义AppBarLayout.Behavior说明04.CoordinatorLayo ... [详细]
  • 本文介绍了两种有效的方法来检查Android应用是否拥有特定权限,如媒体读写权限(media_rw)。通过这些方法,开发者和安全人员可以更好地了解应用的行为,确保其不会滥用权限。 ... [详细]
  • 本文详细介绍了ejabberd中的验证码服务、接收器以及服务器间通信的监督者和工作进程,包括它们的启动方式和主要功能。 ... [详细]
  • 本文探讨了如何在Android框架下通过自定义资源文件实现系统风格的统一,包括系统资源文件的位置、引用方法、系统主题的设置及修改等内容。 ... [详细]
  • 深入理解Django中的AJAX应用
    本文详细介绍了AJAX技术及其在Django框架中的应用。AJAX,即异步JavaScript和XML,允许网页在不重新加载整个页面的情况下与服务器交换数据并更新部分网页。 ... [详细]
  • 探讨了当类没有默认构造函数时,如何使用特定参数创建多个对象的方法。本文提供了多种解决方案,包括使用指针数组和标准库容器。 ... [详细]
  • 深入解析晶体振荡器的工作机制及其应用
    本文详细介绍了晶体振荡器的工作原理及主要功能,探讨了其在电子设备中的重要作用,并解释了相关技术术语,旨在为读者提供全面的技术参考。 ... [详细]
  • .NET Core中的一个接口多种实现的依赖注入与动态选择看这篇就够了
    .NETCore中的一个接口多种实现的依赖注入与动态选择看这篇就够了最近有个需求就是一个抽象仓储层接口方法需要SqlServer以及Oracle两种实现方式,为了灵活我在依赖注入的 ... [详细]
  • 企业级 Java 应用的关键性能指标解析
    本文探讨了衡量企业级 Java 应用性能的四大核心指标:商业事务、外部服务、垃圾回收及应用布局。这些指标不仅直接影响用户体验,还关系到系统的稳定性和效率。 ... [详细]
  • Docker基础指南与核心命令解析
    本文全面介绍了Docker的基本概念、安装方法、核心命令及其用法,并深入探讨了Docker容器的数据卷管理及应用部署策略,适合初学者快速掌握Docker技术。 ... [详细]
  • 本文介绍了数字音视频编解码技术标准,特别是中国自主研发的AVS标准,及其在短视频软件开发中的应用。文章探讨了AVS标准的发展历程、技术特点以及与国际标准的对比。 ... [详细]
  • 本文详细介绍了Flutter中的Stack、IndexedStack以及Positioned三个布局组件的使用方法和应用场景。Stack允许开发者以堆叠的方式展示多个子组件;IndexedStack则提供了一种仅显示指定索引子组件的方法;而Positioned则是Stack的子组件,用于精确定位子组件的位置。 ... [详细]
author-avatar
上海外国灬语大学-校友粉丝团
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有