假设我的舞台上有一张位图,我想将此位图加载到 TileList 组件中。但是 TileList 的 dataProvider 请求 URL 链接作为参数而不是 bitmapData 传递。我该怎么做?
注意:我正在从 Sqlite 数据库中加载位图数据,它存储为 byteArray。哦,我正在使用 AIR。
假设我的舞台上有一张位图,我想将此位图加载到 TileList 组件中。但是 TileList 的 dataProvider 请求 URL 链接作为参数而不是 bitmapData 传递。我该怎么做?
注意:我正在从 Sqlite 数据库中加载位图数据,它存储为 byteArray。哦,我正在使用 AIR。
您可以将 DisplayObject 作为 TileList 项的源参数传递。如果你有一个 BitmapData 最快的选项是传递一个包含该 bitmapData 的 Bitmap 对象:
for(var i:int = 0 ; i < 10; i++) t.addItem({label:'item '+(i+1),source:new Bitmap(new YourBitapData())});
如果你想做自定义单元格渲染器路由,你也可以这样做。主要问题是 UIComponent 的 getDisplayObjectInstance() 方法不适合 BitmapData。我想你可以继承 ImageCell 并进行所需的更改:
if(getQualifiedSuperclassName(classDef) == "flash.display::BitmapData") return new Bitmap(new classDef);
越简单越好,所以我建议尝试我的第一个建议。
我没有使用过 fl.controls.TileList,但它似乎使用了 Flex 组件使用的类似策略:项目渲染器。
在这种情况下,fl.controls.TileList 的文档说:
该组件的默认单元格渲染器是 ImageCell 类。ImageCell 单元格渲染器显示缩略图和单行标签。要在 TileList 组件中呈现基于列表的单元格,请使用 CellRenderer 类。
在您的情况下,您想要的是指定一个BitMapData
仅从 dataProvider 获取 a 并使用它来显示图像的类。
要为渲染器使用不同的类,请使用TileList
的cellRenderer样式。
我还没有为 Flash TileList 创建自定义单元格渲染器,但这里有一些链接可以帮助您入门:
创建自己的自定义渲染器的基本方法是这样的:
1. 创建一个扩展 CellRenderer 的新类:
public class CustomRenderer extends CellRenderer
{
public function CustomRenderer()
{
super();
}
}
data
2.重写类属性的setter方法CellRenderer
:
该TileList
组件将为dataProvider
. 然后它在每个渲染器上调用这个 setter 方法来传递该元素的数据。在此设置器中,您可以获取BitMapData
并使用它来渲染图像。下面是一些未经测试的代码,可能有更好的方法来做到这一点(我们在 Flex 中为这种类型的东西提供了很好的快捷方式)
override public function set data(value:Object):void
{
super.data = value;
if (value != null && value.hasOwnProperty("propertyNameThatContainsBitMapData"))
{
var bmData:BitMapData = value["propertyNameThatContainsBitMapData"] as BitMapData;
if (bmData)
{
var g:Graphics = this.graphics;
g.beginBitMapFill(bmData);
g.drawRect(0,0,100,100); // use whatever dimensions you want
g.endFill();
}
}
}