我的编程空间,编程开发者的网络收藏夹
学习永远不晚

详解Android中Drawable方法

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

详解Android中Drawable方法

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

1. BitmapDrawable相关方法:

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


<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
  android:antialias="true"
  android:dither="true"
  android:filter="true"
  android:gravity="center"
  android:mipMap="false"
  android:class="lazy" data-src="@drawable/ic_launcher"
  android:tileMode="disabled" /> 

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


<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
  <!-- 图片抗锯齿效果,开启后会让图片变平滑,也可以在一定程度上降低图片分辨率(幅度可忽略) -->
  android:antialias="true"
  <!-- 是否开启抖动效果,开启这个选项可以染高质量的图片在低质量的屏幕下还能较好的显示 -->
  android:dither="true"
  <!-- 是否开启过滤,开启可以保持较好的显示效果 -->
  android:filter="true"
  <!-- 图片重力控制,可以控制图片位置,也可以通过“|”来组合使用:
      top          图片放到顶部,不改变图片大小
      bottom        图片放到底部,不改变大小
      left        图片放到左边,不改变大小
      right        图片放到右边,不改变大小
      center_vertical    使图片竖直居中,不改变大小
      fill_vertical    图片竖直方向充满整个容器
      center_horizontal  图片水平方向居中,不改变图片大小
      fill_horizontal    图片水平方向充满
      center        图片中间居中  
      fill        图片充满容器,这个是默认值
      clip_vertical    附加选项,表示竖直方向的裁剪,较少使用
      clip_horizontal    附加选项,便是水平方向的裁剪,较少使用
   -->
  android:gravity="center"
  <!-- 纹理映射,一遍为false -->
  android:mipMap="false"
  <!-- 图片的数据源 -->
  android:class="lazy" data-src="@drawable/ic_launcher"
  <!-- 有如下几个值,对应的方式如下:
    disabled  默认模式,关闭平铺
    repeat    加单的水平和竖直方向平铺
    mirror    一种在水平和竖直方向的镜面投影效果
    clamp    四周像素扩散到周围区域 -->
  android:tileMode="disabled" /> 

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

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

基本示例代码:


<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
  android:shape="rectangle">
  <corners
    android:bottomLeftRadius="1px"
    android:bottomRightRadius="1px"
    android:radius="2px"
    android:topLeftRadius="1px"
    android:topRightRadius="1px" />
  <gradient
    android:angle="5"
    android:centerColor="#ff789434"
    android:centerX="x"
    android:centerY="y"
    android:endColor="#34234324"
    android:gradientRadius="55dp"
    android:startColor="#ff783247"
    android:type="linear"
    android:useLevel="true" />
  <padding
    android:bottom="5dp"
    android:left="5dp"
    android:right="5dp"
    android:top="5dp" />
  <size
    android:width="70dp"
    android:height="70dp" />
  <solid android:color="#fffff333" />
  <stroke
    android:width="30dp"
    android:color="#33333333"
    android:dashGap="4dp"
    android:dashWidth="4dp" />
</shape>

各个标签详细说明:

<shape>表示图像形状

表示图形形状,有四个选项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来使用时候

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

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

<gradient>(颜色渐变)

表示渐变填充,它与标签互斥,包含的几个属性值意义如下:
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(扫描线渐变)三种,其中默认为线性渐变

<solid>(纯色填充)

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

<stroke>(描边属性)

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

<padding>内边距

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

<size>

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

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

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


<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
  <item
    android:id="@+id/item1"
    android:bottom="1dp"
    android:drawable="@drawable/ic_launcher"
    android:left="1dp"
    android:right="1dp"
    android:top="1dp">
  </item>
</layer-list> 

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

4. StateListDrawable(选择器)

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


<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" 
  <!-- 是否会随着状态的改变而改变,默认为false,表示会随着改变 -->
  android:constantSize="true" 
  <!-- 是否开启抖动,开启可以在低分辨率手机上获得较好的显示,建议为true -->
  android:dither="true" 
  <!-- 是否随着状态而改变内边距,建议为true -->
  android:variablePadding="true">
  <item 
    <!-- 对应的drawable -->
    android:drawable="@drawable/ic_launcher"
    <!-- 按下状态,比如button按下未松开 -->
    android:state_pressed="true"
    <!-- 表示View已经获得焦点 -->
    android:state_focused="true"
    <!-- 光标是否悬停,4.0以后特性 -->
    android:state_hovered="true"
    <!-- 表示用户选择了view -->
    android:state_selected="true"
    <!-- 表示组件是否能被选中,如RadioButton -->
    android:state_checkable="true"
    <!-- 表示用户选中了view,一般用于选择按钮 -->
    android:state_checked="true"
    <!-- 表示view当前处于可用状态 -->
    android:state_enabled="true"
    <!-- 表示view处于激活状态 -->
    android:state_activated="true"
    <!-- 应用程序是否在前台 -->
    android:state_window_focused="true">
   </item>
</selector> 

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

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

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


<?xml version="1.0" encoding="utf-8"?>
<level-list xmlns:android="http://schemas.android.com/apk/res/android" >
  <item
    <!-- 对应的drawable -->
    android:drawable = "@drawable/ic_lunch"
    <!-- 最大等级 -->
    android:maxLevel = "2"
    <!-- 最小等级 -->
    android:minLevel = "1">
    <!-- 在最大和最小等级之间的等级会对应此item中的Drawable,当它作为view的背景时候,可以通过
    Drawable的setLevel方法来设置不同的等级,从而切换具体的drawable。还可以通过ImageView的
    setImageLevel方法来切换,等级范围是0到10000,0是默认值 -->
  </item>
</level-list>

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

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


<?xml version="1.0" encoding="utf-8"?>
<transition xmlns:android="http://schemas.android.com/apk/res/android" >
  <item
    <!-- 对应的drawable -->
    android:drawable = "@drawable/ic_lunch"
    <!-- 对应的id -->
    android:id = "@+id/item1"
    <!-- drawable四周的偏移量 -->
    android:top = "1dp"
    android:right = "1dp"
    android:bottom = "1dp"
    android:left = "1dp">
  </item>
</transition>

使用方式:

定义渐变


<?xml version="1.0" encoding="utf-8"?>
<transition
  xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:drawable="@drawable/drawable1" />
  <item android:drawable="@drawable/drawable" />
</transition>

将渐变添加到背景


<TextView
android:id = "@+id/button"
andoird:layout_height = "wrap_content"
android:layout_width = "wrap_content"
android:background = "@drawable/transition_drawable"
/>

在代码中控制


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

7. InsetDrawable(内嵌一个Drawable)

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


<?xml version="1.0" encoding="utf-8"?>
<inset xmlns:android="http://schemas.android.com/apk/res/android"
  <!-- 对应的Drawable,也可以直接写在内部 -->
  android:drawable="@drawable/ic_launcher"
  <!-- Drawable距离四周的边距 -->
  android:insetBottom="2dp"
  android:insetLeft="2dp"
  android:insetRight="2dp"
  android:insetTop="2dp" >
  <!-- 内部用来放置对应的Drawable,也可以直接在上边引用 -->
</inset> 

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

对应的代码如下:


<?xml version="1.0" encoding="utf-8"?>
<scale xmlns:android="http://schemas.android.com/apk/res/android"
  <!-- 对应的Drawable -->
  android:drawable="@drawable/ic_launcher"
  <!-- 显示的位置 -->
  android:scaleGravity="center"
  <!-- 对应的缩放比例 -->
  android:scaleHeight="50%"
  android:scaleWidth="50%" >
</scale> 

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


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

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

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


<?xml version="1.0" encoding="utf-8"?>
<clip xmlns:android="http://schemas.android.com/apk/res/android"
  <!-- 裁剪方向,水平或竖直 -->
  android:clipOrientation="horizontal"
  android:drawable="@+id/icon"
  <!-- 和clipOrientation配合使用,详情见下面说明-->
  android:gravity="top" >
</clip> 

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);
您可能感兴趣的文章:android中图形图像处理之drawable用法分析关于Android中drawable必知的一些规则Android自定义Drawable实现圆角效果Android Drawable及其相关类的使用Android开发基于Drawable实现圆角矩形的方法Android自定义Drawable实现圆形和圆角Android Drawable和Bitmap的转换实例详解Android中drawable使用Shape资源Android开发使用Drawable绘制圆角与圆形图案功能示例Android自定义Drawable之在Drawable中部指定透明区域方法示例


免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

详解Android中Drawable方法

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

详解Android中Drawable方法

本文为大家分享了Android中Drawable方法的详细使用方法,供大家参考,具体内容如下 1. BitmapDrawable相关方法: 新建在drawable目录下面,示例如下:2022-06-06

Android App开发中将View或Drawable转为Bitmap的方法

View转换为Bitmap Android中经常会遇到把View转换为Bitmap的情形,比如,对整个屏幕视图进行截屏并生成图片;Coverflow中需要把一页一页的view转换为Bitmap、以便实现复杂的图形效果(阴影、倒影效果等);再
2022-06-06

Android编程中TextView宽度过大导致Drawable无法居中问题解决方法

本文实例讲述了Android编程中TextView宽度过大导致Drawable无法居中问题解决方法。分享给大家供大家参考,具体如下: 在做项目的时候,很多时候我们都要用到文字和图片一起显示,一般设置TextView的DrawableLeft
2022-06-06

详解Android中解析XML的方法

XML在各种开发中都广泛应用,Android也不例外。作为承载数据的一个重要角色,如何读写XML成为Android开发中一项重要的技能。今天就由我向大家介绍一下在Android平台下几种常见的XML解析和创建的方法。在Android中,常见
2022-06-06

android中图形图像处理之drawable用法分析

本文实例讲述了android中图形图像处理之drawable用法。分享给大家供大家参考。具体如下: 一、如何获取 res 中的资源 数据包package:android.content.res 主要类:Resources 其主要接口按照功能
2022-06-06

Android中HorizontalScrollView使用方法详解

由于移动设备物理显示空间一般有限,不可能一次性的把所有要显示的内容都显示在屏幕上。所以各大平台一般会提供一些可滚动的视图来向用户展示数据。Android平台框架中为我们提供了诸如ListView、GirdView、ScrollView等滚动
2022-06-06

Android中PopupWindow使用方法详解

参考原文Android PopupWindow用法解析进行学习,通过实例及PopupWindow源码分析了PopupWindow的使用。文章最后的“补充Case: 弹窗不消失,但是事件向下传递”很赞。 不过,源码已经发生了变化,文章中提到的
2022-06-06

详解Android中Handler的使用方法

在Android开发中,我们经常会遇到这样一种情况:在UI界面上进行某项操作后要执行一段很耗时的代码,比如我们在界面上点击了一个”下载“按钮,那么我们需要执行网络请求,这是一个耗时操作,因为不知道什么时候才能完成。为了保证不影响UI线程,所
2022-06-06

详解Android中Notification的使用方法

在消息通知的时候,我们经常用到两个控件Notification和Toast。特别是重要的和需要长时间显示的信息,用Notification最合适不过了。他可以在顶部显示一个图标以标示有了新的通知,当我们拉下通知栏的时候,可以看到
2022-06-06

详解Android中IntentService的使用方法

为什么我们需要IntentService Android中的IntentService是继承自Service类的,在我们讨论IntentService之前,我们先想一下Service的特点: Service的回调方法(onCreate、o
2022-06-06

Android 中Context的使用方法详解

Android 中Context的使用方法详解概要:Context字面意思是上下文,位于framework package的android.content.Context中,其实该类为LONG型,类似Win32中的Handle句柄。很多方法
2023-05-30

详解Android中AsyncTask的使用方法

在Android中实现异步任务机制有两种方式,Handler和AsyncTask。Handler模式需要为每一个任务创建一个新的线程,任务完成后通过Handler实例向UI线程发送消息,完成界面的更新,这种方式对于整个过程的控制比较精细,但
2022-06-06

详解Android中weight的使用方法

android中对weight的学习可以说是必须的,如果UI布局仅仅使用dp与sp等等,会让布局显得极度不灵活,毕竟各个手机屏幕大小不同,更别说是还有ipad之类的了,所以也是同做本人近期做的一个小UI来分享一下weight的使用。
2022-06-06

详解Android中Intent的使用方法

一、Intent的用途 Intent主要有以下几种重要用途: 1. 启动Activity:可以将Intent对象传递给startActivity()方法或startActivityForResult()方法以启动一个Activity,该I
2022-06-06

Android 中RxPermissions 的使用方法详解

Android 中RxPermissions 的使用方法详解以请求拍照、读取位置权限为例module的build.gradle: compile 'com.tbruyelle.rxpermissions2:rxpermissions:0.
2023-05-30

Android中gson、jsonobject解析JSON的方法详解

JSON的定义: 一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性。业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得了当今大部分语言的支持),从而可以在不同平台间进行数据交换。JSON采用兼容性很高的文本格式
2022-06-06

Android HandlerThread使用方法详解

Android HandlerThread使用方法详解HandlerThread 继承自Thread,内部封装了Looper。首先Handler和HandlerThread的主要区别是:Handler与Activity在同一个线程中,Han
2023-05-30

Android Notification 使用方法详解

Android Notification 使用方法详解用TaskStackBuilder来获取PendingIntent处理点击跳转到别的Activity,首先是用一般的PendingIntent来进行跳转。mBuilder = new N
2023-05-30

android BitmapFactory.Options使用方法详解

BitmapFactory.Options的使用是在加载图片时,就从图片的加载和使用说起 怎样获取图片的大小?首先我们把这个图片转成Bitmap,然后再利用Bitmap的getWidth()和getHeight()方法就可以取到图片的宽高
2022-06-06

编程热搜

  • Android:VolumeShaper
    VolumeShaper(支持版本改一下,minsdkversion:26,android8.0(api26)进一步学习对声音的编辑,可以让音频的声音有变化的播放 VolumeShaper.Configuration的三个参数 durati
    Android:VolumeShaper
  • Android崩溃异常捕获方法
    开发中最让人头疼的是应用突然爆炸,然后跳回到桌面。而且我们常常不知道这种状况会何时出现,在应用调试阶段还好,还可以通过调试工具的日志查看错误出现在哪里。但平时使用的时候给你闹崩溃,那你就欲哭无泪了。 那么今天主要讲一下如何去捕捉系统出现的U
    Android崩溃异常捕获方法
  • android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
    系统的设置–>电池–>使用情况中,统计的能耗的使用情况也是以power_profile.xml的value作为基础参数的1、我的手机中power_profile.xml的内容: HTC t328w代码如下:
    android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
  • Android SQLite数据库基本操作方法
    程序的最主要的功能在于对数据进行操作,通过对数据进行操作来实现某个功能。而数据库就是很重要的一个方面的,Android中内置了小巧轻便,功能却很强的一个数据库–SQLite数据库。那么就来看一下在Android程序中怎么去操作SQLite数
    Android SQLite数据库基本操作方法
  • ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
    工作的时候为了方便直接打开编辑文件,一些常用的软件或者文件我们会放在桌面,但是在ubuntu20.04下直接直接拖拽文件到桌面根本没有效果,在进入桌面后发现软件列表中的软件只能收藏到面板,无法复制到桌面使用,不知道为什么会这样,似乎并不是很
    ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
  • android获取当前手机号示例程序
    代码如下: public String getLocalNumber() { TelephonyManager tManager =
    android获取当前手机号示例程序
  • Android音视频开发(三)TextureView
    简介 TextureView与SurfaceView类似,可用于显示视频或OpenGL场景。 与SurfaceView的区别 SurfaceView不能使用变换和缩放等操作,不能叠加(Overlay)两个SurfaceView。 Textu
    Android音视频开发(三)TextureView
  • android获取屏幕高度和宽度的实现方法
    本文实例讲述了android获取屏幕高度和宽度的实现方法。分享给大家供大家参考。具体分析如下: 我们需要获取Android手机或Pad的屏幕的物理尺寸,以便于界面的设计或是其他功能的实现。下面就介绍讲一讲如何获取屏幕的物理尺寸 下面的代码即
    android获取屏幕高度和宽度的实现方法
  • Android自定义popupwindow实例代码
    先来看看效果图:一、布局
  • Android第一次实验
    一、实验原理 1.1实验目标 编程实现用户名与密码的存储与调用。 1.2实验要求 设计用户登录界面、登录成功界面、用户注册界面,用户注册时,将其用户名、密码保存到SharedPreference中,登录时输入用户名、密码,读取SharedP
    Android第一次实验

目录