問題があり、誰かがTileListを含むFlashプロジェクトを手伝ってくれることを願ってい
ます。このTileListの一部のアイテム(すべてではない)の背景を赤に、一部を青に変更する必要があります
。これを行う方法を知っていますか?
ありがとう
1 に答える
うーん、トリッキーです。
私はこれをきれいな方法で解決しようとしましたが、Flash ではそう簡単に解決できませんでした。基本的な考え方は、upSkin スタイル、または itemRenderer(ImageCell) ごとに必要なスキンをすべて設定するのではなく (tileList.setRendererStyle()); のように設定することです。
ImageCell クラス (TileList のデフォルトの Cell Renderer) に簡単にアクセスできると思っていましたが、そうではありません。cellRenderer itemToCellRendererメソッドにアクセスできる唯一の方法ですが、引数として渡される項目は ListEvent から取得されます
アイデアを説明するために、ドキュメントに含まれる例を変更しました。このコードは、TileList コンポーネントと、ライブラリに次のリンケージを持つ 3 つの MovieClips シンボルがあることを前提としています: Star、BlueBg、RedBg import fl.controls。; fl.controls.listClasses をインポートします。; fl.data をインポートします。; fl.events をインポートします。;
var totalEntries:uint = 20;
var myTileList:TileList = new TileList();
myTileList.columnWidth = 125;
myTileList.rowHeight = 150;
myTileList.columnCount = 3;
myTileList.rowCount = 1;
myTileList.move(10,10);
addChild(myTileList);
for(var i:int=0; i<totalEntries; i++) {
myTileList.addItem( { label:"star"+i, source:Star, scaleContent:false, index:i} );
}
myTileList.addEventListener(ListEvent.ITEM_ROLL_OVER, listItemOver);
function listItemOver(e:ListEvent):void {
var imageCell:ImageCell = myTileList.itemToCellRenderer(e.item) as ImageCell;
//e.index % 2 == 0 ? imageCell.setStyle('upSkin',BlueBg): imageCell.setStyle('upSkin',RedBg);
}
たとえそれが機能したとしても、これは面倒です。ITEM_ROLL_OVER イベントをディスパッチする際に問題が発生します。また、コンポーネントにデータが入力されたときに大量のイベントをディスパッチするのは、一部の色だけに適しているとは思いません。
すっごく... Flash に当てはまることが 2 つあります
- Flash コンポーネントのデフォルトの動作を望んでいる人はほとんどいません。誰もがちょっとしたカスタムを望んでいます。
- Flash の「魔法」は、私が推測する「ハッキーな」ソリューションを見つけることにあります。
これが私にとってうまくいったことです:アイテムを追加するときに、プロパティも追加してインデックス付けすることに注意してください。これにより、各アイテムはインデックスが何であるかを知ることができます。次に、各セルのコンテンツに表示する適切なスキンを決定させます (依存関係が作成されるため、これには明確な方法があるはずです)。そのため、Star MovieClip に次のコードを追加しました。
import fl.controls.listClasses.ImageCell;
var cell:ImageCell = this.parent.parent.parent as ImageCell;
trace(cell.data.index);
if(cell.data.index %2 == 0) cell.setStyle('upSkin',BlueBg);
else cell.setStyle('upSkin',RedBg);
お役に立てれば。