我想为包含图像和标签的列表实现一个itemRenderer。列表的数据提供者是我从后端获得的对象列表:
public class Object {
private String label;
private byte[] content;}
我的项目渲染器:
<s:MXDataGridItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx">
<s:layout>
<s:HorizontalLayout/>
</s:layout>
<mx:Image source="{data.content}"/>
<s:Label text="{data.label}"/>
我只得到了一张残缺的图像。有没有人知道我为什么要解决这个问题以及如何解决这个问题。先谢谢你,雅代
发布于 2012-08-30 22:38:05
http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/spark/components/Image.html#source
BitmapFill实例化该类并创建该类的位图渲染。DisplayObject的实例。BitmapFill将其复制到位图中进行填充。
spark.components.Image不能使用ByteArray实例作为源。因此您需要将其转换为Bitmap实例。
如下所示:
<?xml version="1.0"?>
<s:MXDataGridItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark">
<fx:Script><![CDATA[
private var _bytesLoader:Loader;
override public function set data(value:Object):void
{
super.data = value;
_loadBytes(data.bytes as ByteArray);
}
private function _loadBytes(bytes:ByteArray):void
{
_destroyBytesLoader();
if (!bytes)
{
return;
}
_createBytesLoader();
try
{
_bytesLoader.loadBytes(bytes);
}
catch (e:*)
{
_destroyBytesLoader();
}
}
private function _createBytesLoader():void
{
_bytesLoader = new Loader();
_bytesLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, _bytesLoader_completeHandler);
_bytesLoader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, _bytesLoader_errorHandler);
_bytesLoader.contentLoaderInfo.addEventListener(AsyncErrorEvent.ASYNC_ERROR, _bytesLoader_errorHandler);
}
private function _destroyBytesLoader():void
{
if (!_bytesLoader)
{
return;
}
_bytesLoader.contentLoaderInfo.removeEventListener(Event.COMPLETE, _bytesLoader_completeHandler);
_bytesLoader.contentLoaderInfo.removeEventListener(IOErrorEvent.IO_ERROR, _bytesLoader_errorHandler);
_bytesLoader.contentLoaderInfo.removeEventListener(AsyncErrorEvent.ASYNC_ERROR, _bytesLoader_errorHandler);
try
{
_bytesLoader.unload();
}
catch (e:*){}
_bytesLoader = null;
}
private function _bytesLoader_completeHandler(event:Event):void
{
try
{
myImage.source = Bitmap(_bytesLoader.content).bitmapData.clone();
}
catch (e:*)
{
}
_destroyBytesLoader();
}
private function _bytesLoader_errorHandler(event:Event):void
{
_destroyBytesLoader();
}
]]></fx:Script>
<s:layout>
<s:HorizontalLayout />
</s:layout>
<s:Image id="myImage"/>
<s:Label text="{data.label}" />
</s:MXDataGridItemRenderer>https://stackoverflow.com/questions/12195081
复制相似问题