Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package feathers.examples
- {
- import feathers.controls.Button;
- import feathers.controls.List;
- import feathers.controls.Scroller;
- import feathers.core.FeathersControl;
- import feathers.data.ListCollection;
- import feathers.examples.BlogListItemRenderer;
- import feathers.layout.VerticalLayout;
- import flash.display.BitmapData;
- import flash.events.IOErrorEvent;
- import flash.events.SecurityErrorEvent;
- import flash.geom.Matrix;
- import flash.net.URLLoader;
- import flash.net.URLLoaderDataFormat;
- import flash.net.URLRequest;
- import flash.text.TextField;
- import flash.text.TextFieldAutoSize;
- import flash.text.TextFormat;
- import flash.xml.XMLDocument;
- import starling.display.Sprite;
- import starling.events.Event;
- import starling.textures.Texture;
- /**
- * A very basic example to create a Button with Feathers.
- */
- public class Main extends Sprite
- {
- private var _list:List;
- public function Main()
- {
- //we'll initialize things after we've been added to the stage
- this.addEventListener(Event.ADDED_TO_STAGE, addedToStageHandler);
- }
- protected function addedToStageHandler(event:Event):void
- {
- this.removeEventListener(Event.ADDED_TO_STAGE, addedToStageHandler);
- // make list control
- _list = new List();
- _list.width = 300;
- _list.height = 768;
- // properties
- _list.itemRendererProperties.horizontalAlign = Button.HORIZONTAL_ALIGN_LEFT;
- _list.itemRendererProperties.verticalAlign = Button.VERTICAL_ALIGN_MIDDLE;
- var vl:VerticalLayout = new VerticalLayout();
- vl.hasVariableItemDimensions = true;
- _list.layout = vl;
- _list.scrollerProperties.snapScrollPositionsToPixels = true;
- _list.scrollerProperties.verticalScrollPolicy = Scroller.SCROLL_POLICY_ON;
- // cell renderer
- _list.itemRendererType = BlogListItemRenderer;
- // add list to display
- addChild(_list);
- // get Blog data
- var xmlLoader:URLLoader = new URLLoader();
- xmlLoader.dataFormat = URLLoaderDataFormat.TEXT;
- xmlLoader.addEventListener(flash.events.Event.COMPLETE, _handleXMLLoaded, false, 0, true);
- xmlLoader.addEventListener(IOErrorEvent.IO_ERROR, _handleXMLError, false, 0, true);
- xmlLoader.addEventListener(IOErrorEvent.NETWORK_ERROR, _handleXMLError, false, 0, true);
- xmlLoader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, _handleXMLError, false, 0, true);
- // cnn blog feed for testing
- xmlLoader.load(new URLRequest('http://politicalticker.blogs.cnn.com/feed/'));
- }
- private function _handleXMLLoaded(e:flash.events.Event):void
- {
- if (e.type != Event.COMPLETE) { return; }
- // get data in list form
- var dataList:XMLList = XMLList(XML(e.target.data).channel.item);
- // data for collection
- var dataProvided:Array = new Array();
- // get only 10 items
- for (var feedIndex:int = 0; feedIndex < 10; feedIndex++)
- {
- // populate an object to add to array
- var currentData:Object = new Object();
- // container used to draw() into BitmapData
- var container:flash.display.Sprite = new flash.display.Sprite();
- // Blog title
- var tt:TextField = new TextField();
- container.addChild(tt);
- tt.autoSize = TextFieldAutoSize.LEFT;
- tt.multiline = true;
- tt.wordWrap = true;
- tt.text = String(new XMLDocument(dataList[feedIndex].title.text()).firstChild.nodeValue);
- tt.width = 250;
- tt.y = 5;
- tt.x = 10;
- tt.setTextFormat(new TextFormat("Arial",15,0x333333));
- // Blog date
- var dt:TextField = new TextField();
- container.addChild(dt);
- dt.autoSize = TextFieldAutoSize.LEFT;
- dt.wordWrap = true;
- var feedDateStr:String = dataList[feedIndex].pubDate.text();
- feedDateStr = feedDateStr.replace(/\,/g, "");
- var feedDate:Date = new Date(feedDateStr);
- dt.text = String(feedDate.toDateString());
- dt.width = 250;
- dt.y = int(tt.y + tt.height);
- dt.x = 10;
- dt.setTextFormat(new TextFormat("Arial",13,0x999999,false,true));
- // Blog description
- var st:TextField = new TextField();
- container.addChild(st);
- st.autoSize = TextFieldAutoSize.LEFT;
- st.multiline = true;
- st.wordWrap = true;
- st.text = String(new XMLDocument(dataList[feedIndex].description.text()).firstChild.nodeValue).substr(0,120);
- if (String(new XMLDocument(dataList[feedIndex].description.text()).firstChild.nodeValue).length > 120)
- {
- st.appendText(" [..]");
- }
- st.width = 250;
- st.y = int(dt.y + dt.height);
- st.x = 10;
- st.setTextFormat(new TextFormat("Arial",13,0x333333));
- // generate a simple white square background
- var cellBG:flash.display.Sprite = new flash.display.Sprite();
- cellBG.graphics.beginFill(0xf5f5f5,1);
- cellBG.graphics.drawRect(0,0,300,int(st.y + st.height + 10));
- cellBG.graphics.endFill();
- container.addChildAt(cellBG,0); // add under text
- // pre-create Texture of this text for reference
- var bmd:BitmapData = new BitmapData(300,container.height,false,0xFFFFFF);
- bmd.draw(container);
- currentData.texture = Texture.fromBitmapData(bmd);
- currentData.url = dataList[feedIndex].link.text();
- dataProvided.push(currentData);
- // cleaning up
- bmd.dispose();
- while (container.numChildren > 0) { container.removeChildAt(0); }
- container = null;
- tt = null;
- dt = null;
- st = null;
- bmd = null;
- }
- _list.dataProvider = new ListCollection(dataProvided);
- _list.selectedIndex = 0;
- }
- private function _handleXMLError(e:Event):void
- {
- trace("Blog._handleXMLError() -Error loading XML [" + e.target + "]: " + e.type + " (" + e.toString() + ")");
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment