1

スプライトを拡張するオブジェクトのarrayCollectionがあり、その中にビットマップがあります。

これらをリスト(またはユーザーがスクロールして関連データを表示できるようにするその他のコンポーネント)に表示したいと思います。

私がするとき:myList.dataProvider = myArrayCollection

リストには、ビジュアルスプライトではなく、[Object、Item]の一連の行が表示されます。

これが私のオブジェクトの簡略化されたバージョンです:

public class myUIC extends UIComponent
    {

        public var mySprite:Sprite = new Sprite;

        [Embed(source="assets/BGimage.png")]
        public var BGimage:Class;

        public var myBitmap:Bitmap;
        public var wordText:TextField = new TextField;

        public function myUIC(myWord:String)
        {
            this.wordText.text = myWord;
            this.myBitmap = new BGimage;
            this.mySprite.addChild(this.myBitmap);
            this.mySprite.addChild(this.wordText);
            this.addChild(this.mySprite);
        }
    }

リストに表示するためにさまざまな方法を試しましたが、できません。

4

4 に答える 4

1

このチュートリアルを参照してください:フレックスの例 - フレックス リスト コントロールにアイコンを表示する

于 2009-05-25T08:10:28.920 に答える
0

addChild()を使用して、関連するスプライトにレンダリングの表示リストを追加する単純なアイテムレンダラー(おそらくUIComponentに基づく)を作成してみてください。

于 2009-05-23T01:41:57.653 に答える
0

スプライトを追加するには rawChildren.addChild を試してください

于 2009-07-21T18:19:04.187 に答える
0

ここで、このような itemRenderer を使用してみてください。一般的な DisplayObject で動作するはずです。割り当てられたデータ プロパティから幅と高さを取得しているため、期待どおりに機能させるには、実際のリストで variableRowHeight を true に設定する必要がある場合があります。

package
{
    import flash.display.DisplayObject;
    import mx.controls.listClasses.IListItemRenderer;
    import mx.core.UIComponent;
    import mx.events.FlexEvent;

    /*
    Extending UIComponent means we can add Sprites (or any DisplayObject)
    with addChild() directly, instead of going through the rawChildren property.
    Plus, in this case, we don't need the extra overhead of Canvas's layout code.

    IListItemRenderer lets us use it as a List's itemRenderer. UIComponent already
    implements all of IListItemRenderer except for the data property
    */
    public class SpriteRenderer extends UIComponent implements IListItemRenderer
    {
        // Implementing the data property for IListItemRenderer is really easy,
        // you can find example code in the LiveDocs for IDataRenderer
        private var _data:Object;

        [Bindable("dataChange")]
        public function get data():Object
        {
            return _data;
        }

        public function set data(value:Object):void
        {
            if (value !== _data) {

                // We need to make sure to remove any previous data object from the child list
                // since itemRenderers are recycled
                if (_data is DisplayObject && contains(_data as DisplayObject)) {
                    removeChild(_data as DisplayObject);
                }

                _data = value;

                // Now we just make sure that the new data object is something we can add
                // and add it
                if (_data is DisplayObject) {
                    this.width = (_data as DisplayObject).width;
                    this.height = (_data as DisplayObject).height;

                    addChild(_data as DisplayObject);
                }

                dispatchEvent(new FlexEvent(FlexEvent.DATA_CHANGE));
            }
        }

        public function SpriteRenderer()
        {
            super();
        }
    }
}
于 2009-07-28T09:13:49.110 に答える