実際にはListコントロール自体ではなく、ItemRendererの背景色を変更することで実装します。
- カスタムItemRendererを作成します。(カスタムItemRenderの作成方法についてはこちらの記事を参照してください。)
- カスタムItemRenderの「autoDrawBackground」を「false」にします。
- カスタムItemRenderに「Rect」コンポーネントをセットします。(このコンポーネントにセットする色が背景色になります)
- データを表示させるラベルなどのコンポーネントをセットします。
- 「set data」functionをoverrideして、背景色をデータの条件によって変更します。
※以前紹介した「Listコントロールのアイテムをクリックした時に追加情報がアニメーションしてその下に表示される」のソースコードに追加して実装してあります。
■結果(Flashコンテンツ)
A Flash Content
■ソースコード(メインMXML)
■ソースコード(カスタムItemRenderer)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | <?xml version="1.0" encoding="utf-8"?> <s:View xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" title="HomeView"> <fx:Script> <![CDATA[ private var lastIndex:Number = -1; protected function list_clickHandler(event:MouseEvent):void { if(list.selectedIndex == lastIndex) list.selectedIndex = -1; lastIndex = list.selectedIndex; } ]]> </fx:Script> <s:List id="list" width="100%" height="100%" itemRenderer="CustomItemRenderer" click="list_clickHandler(event)"> <s:dataProvider> <s:ArrayList> <fx:Object firstName="Ken" lastName="Takeda" companyID="00001" phone="111-222-3333"/> <fx:Object firstName="Takashi" lastName="Yamamoto" companyID="00002" phone="444-555-6666"/> <fx:Object firstName="Noriko" lastName="Ijima" companyID="00003" phone="777-888-9999"/> <fx:Object firstName="Yuka" lastName="Nagase" companyID="00004" phone="000-111-2222"/> <!-- 省略 --> </s:ArrayList> </s:dataProvider> </s:List> </s:View> |
■ソースコード(カスタムItemRenderer)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | <?xml version="1.0" encoding="utf-8"?> <s:ItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" autoDrawBackground="false"> <fx:Script> <![CDATA[ [Bindable] public var myBGColor:int = 0xFFFFFF; override public function set data(value:Object):void { super.data = value; if ((value.companyID) == "00001") { myBGColor= 0xFFFFFF; } else if ((value.companyID) == "00002") { myBGColor= 0x00FFFF; } else if ((value.companyID) == "00003") { myBGColor= 0xFFFF00; } else { myBGColor= 0xCCFF66; } } ]]> </fx:Script> <s:states> <s:State name="normal"/> <s:State name="selected"/> </s:states> <s:transitions> <s:Transition fromState="normal"> <s:Parallel duration="300"> <s:Resize target="{this}"/> </s:Parallel> </s:Transition> <s:Transition fromState="selected"> <s:Sequence duration="300"> <s:Resize target="{this}"/> </s:Sequence> </s:Transition> </s:transitions> <s:Rect id="myRect" left="0" right="0" top="0" bottom="0"> <s:fill> <s:SolidColor color="{myBGColor}"/> </s:fill> </s:Rect> <s:VGroup width="100%" paddingTop="10" paddingBottom="10" paddingLeft="5" gap="0" verticalAlign="middle"> <s:Label width="100%" text="{data.lastName} {data.firstName}"/> <s:HGroup width="100%" paddingLeft="5"> <s:Label id="lblCompanyID" text="Company: {data.companyID}" includeIn="selected" paddingTop="10"/> <s:Label id="lblPhone" text="Phone: {data.phone}" includeIn="selected" paddingTop="10"/> </s:HGroup> </s:VGroup> </s:ItemRenderer> |
0 件のコメント:
コメントを投稿