ステージにビットマップがあり、このビットマップを TileList コンポーネントにロードしたいとします。ただし、TileList の dataProvider は URL リンクをパラメーターとして渡すように要求しますが、bitmapData では渡しません。どうすればいいですか?
注: byteArray として格納されている Sqlite データベースから bitmapdata をロードしています。ああ、私はAIRを使用しています。
ステージにビットマップがあり、このビットマップを TileList コンポーネントにロードしたいとします。ただし、TileList の dataProvider は URL リンクをパラメーターとして渡すように要求しますが、bitmapData では渡しません。どうすればいいですか?
注: byteArray として格納されている Sqlite データベースから bitmapdata をロードしています。ああ、私は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 から取得し、それを使用して画像を表示するクラスを指定することです。
レンダラーに別のクラスを使用するには、TileList
のcellRendererスタイルを使用します。
Flash TileList 用のカスタム セル レンダラーはまだ作成していませんが、次のリンクを参考にしてください。
独自のカスタム レンダラーを作成するための基本的なアプローチは次のようになります。
1. CellRenderer を拡張する新しいクラスを作成します。
public class CustomRenderer extends CellRenderer
{
public function CustomRenderer()
{
super();
}
}
2.クラスのdata
プロパティのセッター メソッドをオーバーライドします。CellRenderer
TileList
コンポーネントは、dataProvider
. 次に、各レンダラーでこのセッター メソッドを呼び出して、その要素のデータを渡します。このセッターでは、 を取得し、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();
}
}
}