Android中常用的Drawable的用法

    在Android中,Drawable是一个抽象类,代表的是一种图像的概念,官方介绍它是一种
可以绘制的东西的一般抽象,一张图片,一种颜色都是一个Drawable。

Drawable的实现类有多种,常见的有ShapeDrawable、LayerDrawable…每一种都代表一种类型的Drawable,Drawable经常被当做View的背景来使用,可以在XML文件中定义,也可以在代码中生成, 只不过在代码中步骤较为繁琐,所以一般直接在XML文件中定义。

Drawable使用简单,功能强大,熟练掌握各种Drawable的使用可以方便我们做出一些特殊的UI效果,所以了解各种Drawable的用法还是很有必要的

BitmapDrawable

在BitmapDrawable代表的一张图片,当然我们也可以直接去引用图片就好,但是使用BitmapDrawable的话可以方便我们对图片进行更多操作

在XML文件中定义:

<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@mipmap/preview"
android:gravity="fill_vertical"
android:antialias="true"
android:filter="true"
android:dither="true"
/>

  • src: 图片的资源ID
  • filter: 开启过滤效果,在图片被拉伸的时候保存好的显示效果
  • dither: 开启图片的抖动效果,开启这个效果可以使高分辨率的图片在低分辨率的手机上有一个比较好的显示效果。
  • antialias: 开启图片的抗锯齿功能
  • gravity: 图片的显示位置,属性值:top,left,right,bottom,center…

StateListDrawable

对应XML中的selector,是一个Drawable集合,每个Drawable对应View的不同状态,经常用于那些可交互的View的背景

常见View的状态

android.R.styleable#DrawableStates_state_focused 获取焦点
android.R.styleable#DrawableStates_state_enabled 可用状态
android.R.styleable#DrawableStates_state_checkable 是否可以选择
android.R.styleable#DrawableStates_state_checked 选中状态(CheckBox)
android.R.styleable#DrawableStates_state_selected 选择状态
android.R.styleable#DrawableStates_state_pressed 按下状态,未松开

在XML文件中定义:

<selector xmlns:android="http://schemas.android.com/apk/res/android"
android:constantSize="true"
android:dither="true"
android:variablePadding="true">
<item android:drawable="@drawable/ic_preview2" android:state_pressed="true" />
<item android:drawable="@drawable/ic_preview" />
</selector>

  • constantSize: 是否是否固定Drawable的大小,因为不同View状态对应的Drawable可能大小不一,设置TRUE的话就会取Drawable集合中固有大小最大值,默认值为FALSE
  • dither: 设置是否开启抖动效果
  • variablePadding: 设置Drawable的padding属性是否随着状态改变而改变,默认为FALSE

ShapeDrawable

ShapeDrawable表示的是一种图形,可以是纯色的图形,也可以是渐变效果的图形,这在日常开发中时很常见的

在XML文件中定义:

<shape
xmlns:android="http://schemas.android.com/apk/res/android" android:shape="ring">
<solid android:color="@color/colorAccent" />
<corners android:radius="5dp" />
<padding
android:bottom="5dp"
android:right="5dp"
android:left="5dp"
android:top="5dp" />
<size android:height="10dp" android:width="10dp"/>
<stroke android:color="@color/colorPrimary" android:width="1dp"/>
</shape>

  • shape: 图形的形状,四个选项:rectangle(矩形),ring(圆环),oval(椭圆),line(线)
  • solid: 填充的颜色,纯色填充,与gradient互斥
  • padding: 这个表示的是包含它的View中的空白处
  • size: 表示的当前shape的固有大小,对于shape其实没有大小的概念,它作为View的背景会适应View的大小,Drawable中可以通过getIntrinsicHeight(),getIntrinsicWidth()获取
  • corners: 适用于矩形,设置圆角的程度
  • stroke: 设置shape的描边,有color、width、dashWidth、dashGap属性,可以通过dashWidth,dashGap设置虚线效果,但是这两个属性任何一个为0虚线效果就不生效
  • gradient: 设置渐变效果,angle:渐变的角度,默认为0,必须为45倍数,centerX,centerY:渐变中心店的坐标,startColor:渐变开始颜色,centerColor:渐变中间颜色,endColor:渐变结束颜色,gradientRadius:渐变半径,type:渐变类型(linear:线性渐变,radial:镭射渐变,sweep:扫描渐变)

LayerDrawable

对应XML中的<layer-list>标签,表示的是一种层级化的Drawable集合,就是将不同的Drawable一层一层叠加

在XML文件中定义:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:bottom="1dp">
<shape android:shape="rectangle">
<solid android:color="#00cc99" />
</shape>
</item>
</layer-list>

  • top,right,bottom,left:相对于View各个方向的偏移量
  • drawable: 直接应用一个Drawable资源
  • item: 每一个Item都是一个Drawable

TransitionDrawable

对应XML文件中的<transition>标签,用于实现两个Drawable之间的淡入淡出的效果

在XML文件中定义:

<transition xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@mipmap/preview2" />
<item android:drawable="@mipmap/preview" />
</transition>

XML布局中比较简洁,要实现淡入淡出的效果还需要在代码中通过startTransition(时长)开启

示例:
给TextView设置transitionXML文件背景

TextView tv = findViewById(R.id.tv_transition);
TransitionDrawable transitionDrawable = (TransitionDrawable) tv.getBackground();
transitionDrawable.startTransition(2000);

Android常见Drawable使用相关推荐

  1. Android常见XML属性解析

    常见XML属性解析 属性 描述 android:id android:id的设置,通常有三种方式,详见下文 android:layout_width 控件宽度 android:layout_heigh ...

  2. android mdpi对应哪一个屏幕,android 常见分辨率(mdpi、hdpi 、xhdpi、xxhdpi )及屏幕适配...

    1 Android手机目前常见的分辨率 1.1 手机常见分辨率: 4:3 VGA     640*480 (Video Graphics Array) QVGA  320*240 (Quarter V ...

  3. android控件使用大全,Android常见控件使用详解

    本文实例为大家分享了六种Android常见控件的使用方法,供大家参考,具体内容如下 1.TextView 主要用于界面上显示一段文本信息 2.Button 用于和用户交互的一个按钮控件 //为Butt ...

  4. android常见布局整理

    android 常见的布局小结 布局风格 1先定主基调 :线性布局垂直 2从最基础最简单入手把大模块分解为 一个个小模块来写 <?xml version="1.0" enco ...

  5. Android面试必过——Android常见的问题

    Android常见的问题 标签(空格分隔): 移动开发 常见算法问题的 Java 实现 资料可见 算法介绍可见 算法是很多公司面试必须,国内 BAT 基本面试中都会有,尤以百度为盛. 常见设计模式的 ...

  6. Android常见的问题

    转载:http://stane.sinaapp.com/android面试必过-android常见的问题/ 水平有限,有错误请提出来. Android常见的问题 标签(空格分隔): 移动开发 常见算法 ...

  7. Android常见知识点

    什么是 3G 3G,全称为3rd Generation,中文含义就是指第三代数字通信. 所谓3G,是指将无线通信与国际互联网等多媒体通信结合的新一代移动通信系统. 3G只是一种通信技术标准,符合这个标 ...

  8. Android常见的高级组件搭建移动应用界面

    Android常见的高级组件结合可以搭建移动应用常见的界面结构,如下图所示: 上述的界面可以发现有侧滑菜单,界面的主内容区顶部可以显示Home键.应用标题以及菜单.在底部有导航栏方便导航.通过侧滑菜单 ...

  9. Android的Drawable

    Android的Drawable为Android的UI界面提供了丰富多彩的显示效果.例如,我们View的src属性.background属性可以设置的内容就包括各式各样的drawable资源文件.dr ...

最新文章

  1. org.springframework.jdbc.BadSqlGrammarException: CallableStatementCallback; bad SQL grammar
  2. spring (由Rod Johnson创建的一个开源框架)
  3. 3.2.1 造成误差的原因分析
  4. logging模块和包
  5. 另一个分区工具:GNU 的 parted(转)
  6. PHP:Iterator(迭代器)接口和生成器
  7. 相信自己, 许自己一个未来
  8. JS获取url多个参数及解决中文乱码问题
  9. 欢迎各位大佬,哥哥姐姐 打赏,
  10. Appium元素定位操作app
  11. 新兴媒体舆情传播动态实时监测的技术解决方案
  12. Chome浏览器播放语音、视频无声音的解决办法
  13. python画魄罗代码_LOL:灵魂画师在这里!玩家手绘冰雪节魄罗
  14. FastDFS,Redis,Solr,ActiveMQ核心技术整合五
  15. 线程池ThreadPoolExecutor使用简介
  16. SAP寄售业务会计凭证的分配码原理分析
  17. 【学习笔记】斯坦福SCI写作课 Unit 1
  18. python 如何远程控制另一台机器-通过cmd执行文件
  19. IOS唤起键盘后--导致页面底部空白问题
  20. 解决浏览器缩放导致页面显示不全问题

热门文章

  1. CMake | CMake模块
  2. 脏读 幻读 不可重复读 及其解决方法
  3. csv的Dialect简单使用讲解
  4. php iframe referer,【技术分享】通过iframe注入实现referer欺骗
  5. 1.2 《数据库系统概论》之数据模型(概念模型、逻辑模型--物理模型、层次模型、网状模型、关系模型、面向对象模型、对象关系模型)
  6. 电源学习总结(五)——开关电源基本原理
  7. 邮件群发效果怎么样?外贸新手如何做好邮件营销?
  8. 学生管理系统--网络版
  9. 米思齐Mixly图形化编程---按键控制LED灯
  10. 宏定义ALIAN实现字节对齐