我正在使用Flex 4.6和AIR构建应用程序。它将在Android和iPhone上发布,但目前我正在Android设备上进行测试。
我的基本流程使用不同的屏幕甚至闪光组件。
但是,当在屏幕之间切换时,我的所有s:Image对象都需要很长时间才能加载,即使部署到实际设备也是如此。很长一段时间我只意味着大约半秒钟。这通常不会那么糟糕,但屏幕上的文字会立即显示,而所有图像都保持白色半秒钟,然后加载。
这只是AIR / Flex的事吗?有没有其他人参与其中,希望有一个解决方案?
答案 0 :(得分:1)
如果将图像嵌入到Flex应用程序中,图像往往会加载得更快。 More info on that here。这背后的代码如下所示:
[Embed(source="logo.gif")]
[Bindable]
public var imgCls:Class;
然后你可以像这样使用那个类:
<s:Image id="myImageRaw" source="{imgCls}"/>
[从文档复制的代码]
如果您需要多次使用同一图像,则应考虑使用BitMapImage类;并克隆第一个图像的bitMapData。这是一个快速实用程序类I“Borrowed and modified”,用于从精灵获取BitMapData,反之亦然。 [Flex Image类类扩展了sprite,因此您应该能够将图像作为输入发送]
package com.natejc.utils.display
{
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.DisplayObject;
import flash.display.Sprite;
// **********************************************************************************
// **********************************************************************************
// borrowed from http://www.natejc.com/source/com/natejc/utils/display/DisplayConverter.as
/**
* Provides convenience conversion methods for Sprites and Bitmaps.
*
* Open source. Free to use. Licensed under the MIT License.
*
* @author Nate Chatellier
* @see http://blog.natejc.com
*/
public class DisplayConverter
{
// **********************************************************************************
/**
* Constructs the DisplayConverter object.
*/
public function DisplayConverter()
{
trace("DisplayConverter is a static class and should not be instantiated");
} // END CONSTRUCTOR
// **********************************************************************************
/**
* Converts a Bitmap to a Sprite.
*
* @param bitmap The Bitmap that should be converted.
* @param smoothing Whether or not the bitmap is smoothed when scaled.
* @return The converted Sprite object.
*
* @see http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/display/Bitmap.html#smoothing
*/
public static function bitmapToSprite(bitmap:Bitmap, smoothing:Boolean = false):Sprite
{
var sprite:Sprite = new Sprite();
sprite.addChild( new Bitmap(bitmap.bitmapData.clone(), "auto", smoothing) );
return sprite;
} // END FUNCTION bitmapToSprite
// **********************************************************************************
/**
* Converts a Sprite to a Bitmap.
*
* @param sprite The Sprite that should be converted.
* @param smoothing Whether or not the bitmap is smoothed when scaled.
* @return The converted Bitmap object.
*
* @see http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/display/BitmapData.html#draw()
*/
public static function spriteToBitmap(sprite:Sprite, smoothing:Boolean = false):Bitmap
{
var bitmapData:BitmapData = new BitmapData(sprite.width, sprite.height, true, 0x00FFFFFF);
bitmapData.draw(sprite);
return new Bitmap(bitmapData, "auto", smoothing);
} // END FUNCTION spriteToBitmap
/**
* JH DotComIT added 11/19/2011
* Converts a Sprite to a BitmapData.
*
* @param sprite The Sprite that should be converted.
* @return The converted Bitmap object.
*
* @see http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/display/BitmapData.html#draw()
*/
public static function spriteToBitmapData(sprite:Sprite):BitmapData
{
var bitmapData:BitmapData = new BitmapData(sprite.width, sprite.height, true, 0x00FFFFFF);
bitmapData.draw(sprite);
return bitmapData;
} // END FUNCTION spriteToBitmapData
/**
* Converts BitmapData to a Sprite.
*
* @param bitmap The Bitmap that should be converted.
* @param smoothing Whether or not the bitmap is smoothed when scaled.
* @return The converted Sprite object.
*
* @see http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/display/Bitmap.html#smoothing
*/
public static function bitmapDataToSprite(bitmapData:BitmapData, smoothing:Boolean = false):Sprite
{
var sprite:Sprite = new Sprite();
sprite.addChild( new Bitmap(bitmapData.clone(), "auto", smoothing) );
return sprite;
} // END FUNCTION bitmapToSprite
// **********************************************************************************
// **********************************************************************************
} // END CLASS DisplayConverter
} // END PACKAGE
获得BitMapData后,您可以调用clone获取它的副本并创建同一图像的多个实例。 [做一些关于blitting的研究;游戏开发者使用的技术]。 Spark Image标记也将接受BitMapData作为源。