安卓19开发文档翻译:绘图对象,Drawable
继承 Object
绘图对象(Drawable),泛指“某种可被绘制的东西”。大部分情况下,妳与Drawable打交道的场景只是,将它作为某种能够绘制到屏幕上的资源取出;Drawable类,提供了一个通用的应用编程接口,用来处理一些可能具有不同形式的底层可视化资源。与视图( View )不同的是, Drawable无法接收事件,无法与用户交互。
除了简单的绘图功能之外,Drawable还提供了一些通用的机制,以让它的客户代码能够控制要绘制的内容:
•. 必须 调用 setBounds(Rect) 方法,以向该Drawable 告知,它将被绘制到哪里,以及它应当是多大。所有的绘图对象(Drawables)都应当遵守所请求的尺寸,它们通常的做法就是简单地将它们的图像内容进行缩放。客户代码可使用 getIntrinsicHeight() 和 getIntrinsicWidth() 方法来获取到某个绘图对象(Drawable)的预期尺寸。
•. getPadding(Rect) 方法,可用来返回关于如何对将要放置于某个Drawable中的内容进行边框设置的信息。例如,对于一个被设计用作按钮部件的边框的Drawable,就需要返回一个间距(padding)信息,以便于正确地将文字内容放置于其内部。
•. setState(int[]) 方法,用来让客户代码向该Drawable 告知,它将在哪些状态下被绘制,例如"focused"、"selected"等等。某些绘图对象可能会根据这里所选择的状态来改变它们的图像内容。
•. setLevel(int) 方法,使得客户代码可以提供一个单个的连续控制器,用来修改正在显示的Drawable,例如电量级别或进度级别。某些绘图对象可能会根据当前的级别来修改它们的图像内容。
•.Drawable可利用 Drawable.Callback 接口来回调客户代码,以产生动画效果。所有的客户代码都应当支持这个接口(通过 setCallback(Drawable.Callback) )以让动画正常工作。一种简单的实现方式就是利用系统的功能,例如 setBackground(Drawable) 和 ImageView 。
尽管它们通常对于应用程序不可见,但是,绘图对象(Drawables)可能会有多种形式:
•. 位图: 最简单的Drawable,它是一个PNG或JPEG图片。
•. 点 9: PNG 格式的一个扩展,可以指定关于如何将它拉伸的信息,以及如何将内容放置于其中的信息。
•. 形状: 包含着简单的绘图命令,而不是原始的位图,这种格式在某些情况下可以更好地改变尺寸。
•. 多层: 一个复合的绘图对象,它会将多个底层绘图对象重叠着绘制到一起。
•. 多状态: 一个复合的绘图对象,它会根据当前状态来在一组绘图对象中选择一个来绘制。
•. 多级别: 一个复合的绘图对象,它会根据当前的级别来在一组绘图对象中选择一个来绘制。
•. 缩放: 一个复合的绘图对象,它只有一个子代绘图对象,该子代绘图对象的总尺寸会随着当前的级别而变化。
欲了解该如何使用绘图对象,则阅读 画布和绘图对象 开发者指南。欲知关于创建绘图对象资源(XML或者可由代码载入的位图文件)的信息及对应的示例,则阅读 绘图对象资源 文档。
自此版本开始加入 应用编程接口级别1
利用一个XML 文档中的内容来创建一个绘图对象。欲知更多关于如何使用XML 来创建资源的信息,则阅读 绘图对象资源 。
自此版本开始加入 应用编程接口级别1
在它的区域范围(通过setBounds设置的)内绘制内容,并且遵守各种可选的效果,例如透明度(通过setAlpha设置的)和颜色过滤器(通过setColorFilter设置的)。
canvas |
要在其上绘制内容的画布 |
自此版本开始加入 应用编程接口级别1
•. 将要被此绘图对象使用的当前绘图对象。对于简单的绘图对象,这就是该绘图对象自身。对于像 StateListDrawable 和 LevelListDrawable 那种会改变状态的绘图对象,此时便会 返回当前正在使用的子代绘图对象。
自此版本开始加入 应用编程接口级别1
以间距的形式返回此Drawable 所建议的将内容放置于此绘图对象的区域内部时的位置信息。正值表示偏向此Drawable 的中心(设置Rect.inset)。
•.如果此绘图对象确实拥有一个间距信息,则返回真(true),否则返回假(false)。当返回假(false)时,间距(padding)一定会被设置为0。
自此版本开始加入 应用编程接口级别1
描述当前的状态,具体形式为多个基本状态的组合,例如 state_focused 、 state_selected 等等。某些绘图对象会根据当前选中的状态来修改它们显示的图像。
•.一组资源编号组成的数组,用来描述当前的状态。
自此版本开始加入 应用编程接口级别1
将一个 Drawable.Callback 对象绑定到这个Drawable。对于想要支持带动画效果的绘图对象的那些客户代码,这是必须的。
cb |
客户代码所提供的回调(Callback)实现。 |
自此版本开始加入 应用编程接口级别1
为此绘图对象指定一个可选的颜色过滤器。传入空值( null )则会去掉任何已有的过滤器。
cf |
要应用的颜色过滤器,或者是空值( null )以用来去掉已有的过滤器 |
自此版本开始加入 应用编程接口级别1
为此绘图对象指定一个颜色和坡特道夫(Porter-Duff)模式,以用作颜色过滤器。
自此版本开始加入 应用编程接口级别1
指定此绘图对象的级别。这使得一个绘图对象可根据某个连接的控制值来改变它的图像,例如,显示进度或音量级别。
如果妳所提供的新级别值会引起该Drawable 的外观发生变化的话,则,它需要负责调用 invalidateSelf() ,以使得自身被重绘, 并且 ,此函数会返回真(true)。
level |
新的级别值,其范围为0 (最小值)到10000 (最大值)。 |
•.如果级别值的变化会引起该Drawable 的外观发生变化(也就是说,需要进行一次无效化操作)的话,则返回真(true),否则返回假(false)。
自此版本开始加入 应用编程接口级别1
为该绘图对象指定一组状态值。这些值是与具体用法相关的,因此请参考相关的文档。例如,像 Button 这样的部件,它的背景能够理解以下状态:[ state_focused 、 state_pressed ]。
如果妳所提供的新状态值会引起该Drawable 的外观发生变化的话,则,它需要负责调用 invalidateSelf() ,以使得自身被重绘, 并且 ,此函数会返回真(true)。
注意:该Drawable会持有 stateSet 的一个引用,直到妳向它设置一个新的状态数组为止,因此,在这段时间里,妳不能修改这个数组。
stateSet |
要显示的新的状态集合。 |
•.如果状态的变化会引起该Drawable 的外观发生变化(也就是说,需要进行一次无效化操作)的话,则返回真(true),否则返回假(false)。
自此版本开始加入 应用编程接口级别1
如果妳的子类会根据级别值而改变外观的话,则覆盖这个方法。
•.如果级别值的改变会引起此Drawable 的外观发生变化(也就是说,需要重绘),则返回真(true),否则,如果它仍将保持原样,不需要重绘的话,则返回假(false)。
自此版本开始加入 应用编程接口级别1
在妳的子类中覆盖这个方法,以在识别到了指定的状态时改变外观。
•.如果状态的改变会引起此Drawable 的外观发生变化(也就是说,需要重绘),则返回真(true),否则,如果它仍将保持原样,不需要重绘的话,则返回假(false)。
HxLauncher: Launch Android applications by voice commands