StupidBeauty
Read times:1318Posted at: - no title specified

安卓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,它是一个PNGJPEG图片。

  • •. 9: PNG 格式的一个扩展,可以指定关于如何将它拉伸的信息,以及如何将内容放置于其中的信息。

  • •. 形状: 包含着简单的绘图命令,而不是原始的位图,这种格式在某些情况下可以更好地改变尺寸。

  • •. 多层: 一个复合的绘图对象,它会将多个底层绘图对象重叠着绘制到一起。

  • •. 多状态: 一个复合的绘图对象,它会根据当前状态来在一组绘图对象中选择一个来绘制。

  • •. 多级别: 一个复合的绘图对象,它会根据当前的级别来在一组绘图对象中选择一个来绘制。

  • •. 缩放: 一个复合的绘图对象,它只有一个子代绘图对象,该子代绘图对象的总尺寸会随着当前的级别而变化。

开发者指南

欲了解该如何使用绘图对象,则阅读 画布和绘图对象 开发者指南。欲知关于创建绘图对象资源(XML或者可由代码载入的位图文件)的信息及对应的示例,则阅读 绘图对象资源 文档。

公有方法

public static Drawable createFromXml (Resources r, XmlPullParser parser)

自此版本开始加入 应用编程接口级别1

利用一个XML 文档中的内容来创建一个绘图对象。欲知更多关于如何使用XML 来创建资源的信息,则阅读 绘图对象资源

抛出异常

XmlPullParserException

IOException

public abstract void draw (Canvas canvas)

自此版本开始加入 应用编程接口级别1

在它的区域范围(通过setBounds设置的)内绘制内容,并且遵守各种可选的效果,例如透明度(通过setAlpha设置)和颜色过滤器(通过setColorFilter设置)

参数

canvas

要在其上绘制内容的画布

public Drawable getCurrent ()

自此版本开始加入 应用编程接口级别1

返回
  • •. 将要被此绘图对象使用的当前绘图对象。对于简单的绘图对象,这就是该绘图对象自身。对于像 StateListDrawable LevelListDrawable 那种会改变状态的绘图对象,此时便会 返回当前正在使用的子代绘图对象。

public boolean getPadding (Rect padding)

自此版本开始加入 应用编程接口级别1

以间距的形式返回此Drawable 所建议的将内容放置于此绘图对象的区域内部时的位置信息。正值表示偏向此Drawable 的中心(设置Rect.inset)

返回
  • •.如果此绘图对象确实拥有一个间距信息,则返回真(true),否则返回假(false)。当返回假(false)时,间距(padding)一定会被设置为0

public int[] getState ()

自此版本开始加入 应用编程接口级别1

描述当前的状态,具体形式为多个基本状态的组合,例如 state_focused state_selected 等等。某些绘图对象会根据当前选中的状态来修改它们显示的图像。

返回
  • •.一组资源编号组成的数组,用来描述当前的状态。

public final void setCallback (Drawable.Callback cb)

自此版本开始加入 应用编程接口级别1

将一个 Drawable.Callback 对象绑定到这个Drawable。对于想要支持带动画效果的绘图对象的那些客户代码,这是必须的。

参数

cb

客户代码所提供的回调(Callback)实现。

参考

public abstract void setColorFilter (ColorFilter cf)

自此版本开始加入 应用编程接口级别1

为此绘图对象指定一个可选的颜色过滤器。传入空值( null )则会去掉任何已有的过滤器。

参数

cf

要应用的颜色过滤器,或者是空值( null )以用来去掉已有的过滤器

public void setColorFilter (int color, PorterDuff.Mode mode)

自此版本开始加入 应用编程接口级别1

为此绘图对象指定一个颜色和坡特道夫(Porter-Duff)模式,以用作颜色过滤器。

public final boolean setLevel (int level)

自此版本开始加入 应用编程接口级别1

指定此绘图对象的级别。这使得一个绘图对象可根据某个连接的控制值来改变它的图像,例如,显示进度或音量级别。

如果妳所提供的新级别值会引起该Drawable 的外观发生变化的话,则,它需要负责调用 invalidateSelf() ,以使得自身被重绘, 并且 ,此函数会返回真(true)。

参数

level

新的级别值,其范围为0 (最小)10000 (最大)

返回
  • •.如果级别值的变化会引起该Drawable 的外观发生变化(也就是说,需要进行一次无效化操作)的话,则返回真(true),否则返回假(false)。

public boolean setState (int[] stateSet)

自此版本开始加入 应用编程接口级别1

为该绘图对象指定一组状态值。这些值是与具体用法相关的,因此请参考相关的文档。例如,像 Button 这样的部件,它的背景能够理解以下状态:[ state_focused state_pressed ]

如果妳所提供的新状态值会引起该Drawable 的外观发生变化的话,则,它需要负责调用 invalidateSelf() ,以使得自身被重绘, 并且 ,此函数会返回真(true)。

注意:该Drawable会持有 stateSet 的一个引用,直到妳向它设置一个新的状态数组为止,因此,在这段时间里,妳不能修改这个数组。

参数

stateSet

要显示的新的状态集合。

返回
  • •.如果状态的变化会引起该Drawable 的外观发生变化(也就是说,需要进行一次无效化操作)的话,则返回真(true),否则返回假(false)。

保护方法

protected boolean onLevelChange (int level)

自此版本开始加入 应用编程接口级别1

如果妳的子类会根据级别值而改变外观的话,则覆盖这个方法。

返回
  • •.如果级别值的改变会引起此Drawable 的外观发生变化(也就是说,需要重绘),则返回真(true),否则,如果它仍将保持原样,不需要重绘的话,则返回假(false)。

protected boolean onStateChange (int[] state)

自此版本开始加入 应用编程接口级别1

在妳的子类中覆盖这个方法,以在识别到了指定的状态时改变外观。

返回
  • •.如果状态的改变会引起此Drawable 的外观发生变化(也就是说,需要重绘),则返回真(true),否则,如果它仍将保持原样,不需要重绘的话,则返回假(false)。

Your opinions

Your name:Email:Website url:Opinion content:
- no title specified

HxLauncher: Launch Android applications by voice commands