Flash组件开发思考:简单的新闻列表
制作的原理:动态复制我们所要的的列表,该组件是MovieClip的制作的,采用了两个TextField。
如:写一个类继承 MovieClip类。在这里类里面添加两个TextField 文本。如图:
把这个类封装成为NewList 类,这个类当中定义两个基本信息如title新闻的标题。date新闻的日期。如果希望增加的属性,可以通过扩展这个NewList类。
如:public class NewListA extends NewList 。。。。。。
public class NewListB extends NewList 。。。。。。
可以增加几个文本对象,但是下面的类,当中还是有一些小限制。如文本的颜色,鼠标经过文本的颜色限制。可以修改下面的类扩展我们所希望的功能。
二.制作的过程:
制作的过程:新建一个名为NewList的类,通过继承MovieClip类,实现一些效果。
public class NewList extends MovieClip
{
public function NewList()
{
}
}
第二步:创建三个文本对象:如title 和date对象和content对象。创建后,指定他们的格式,包括字体的大小,颜色格式等等的方式。为了效果 还有可以增加一个下划线。
解决的问题:1.文本如何填充问题
2.文本的超链接问题
3.文本内容显示问题
- package
- {
- import flash.display.MovieClip;
- import flash.events.*;
- import flash.text.*;
- import flash.display.Shape;
- public class NewList extends MovieClip
- {
- public var title:TextField;//标题
- public var date:TextField;//日期
- public var content:TextField;
- public var dataprovider:XML;//指定数据源
- private var format:TextFormat;
- private var shape:Shape;
- public function NewList()
- {
- format=new TextFormat();
- format.color=0x000000;
- format.size=15;
- content=new TextField();
- content.setTextFormat(format);
- title=new TextField();
- title.x=0;
- title.y=0;
- title.width=270;
- title.height=20;
- title.setTextFormat(format);
- title.addEventListener(MouseEvent.MOUSE_DOWN,onDown);
- title.addEventListener(MouseEvent.MOUSE_OVER,onOver);
- title.addEventListener(MouseEvent.MOUSE_OUT,onOut);
- date=new TextField();
- date.x=319;
- date.y=0;
- date.width=107;
- date.height=20;
- date.setTextFormat(format);
- addChild(title);
- addChild(date);
- DrawLine();//画下滑线
- }
- private function DrawLine():void
- {
- var shape:Shape=new Shape();
- shape.graphics.lineStyle(0.5,0,1);
- shape.graphics.moveTo(0,21);
- shape.graphics.lineTo(400,21);
- addChild(shape);
- }
- private function onDown(event:MouseEvent):void
- {
- var evt:TextEvent=new TextEvent(TextEvent.LINK);
- evt.text=content.text;
- this.dispatchEvent(evt);
- }
- private function onOver(event:MouseEvent):void
- {
- title.textColor=0xFF0000;
- }
- private function onOut(event:MouseEvent):void
- {
- title.textColor=0x000000;
- }
- }
- }
第一考虑的问题:新闻标题如何去解决点击事件?恰好Adobe为我们提供了一个TextEvent事件,这个事件当中有一个可以实现超链接的方式。
测试数据:
测试文档:
- var xmlManager:XMLManager=new XMLManager();
- xmlManager.LoadXML("New.XML");
- xmlManager.addEventListener(LoadEvent.LOADXML,completehandler);
- function completehandler(event:LoadEvent):void
- {
- var xml:XML=event.result;
- var xmllist:XMLList=xml.item;
- for (var i:uint=0; i<xmllist.length(); i++)
- {
- var news:NewList=new NewList();
- news.addEventListener(TextEvent.LINK,clickhandler);
- news.x=100;
- news.y=130+25*i;
- news.title.text=xmllist.title[i];
- news.date.text=xmllist.date[i];
- news.content.text=xmllist.contect[i];
- addChild(news);
- }
- }
- function clickhandler(event:TextEvent):void
- { var str:String=event.text;
- trace(str);
- }
外部加载xml返回xml信息:
- package
- {
- import flash.net.*;
- import flash.events.*;
- public class XMLManager extends EventDispatcher
- {
- public function XMLManager()
- {
- }
- public function LoadXML(pach:String):void
- {
- var ld:URLLoader=new URLLoader();
- ld.load(new URLRequest(pach));
- ld.addEventListener(Event.COMPLETE,resultHandle);
- ld.addEventListener(IOErrorEvent .IO_ERROR,errorhandle);
- }
- private function resultHandle(e:Event):void
- {
- var myxml:XML=XML(e.target.data );
- var sendevent:LoadEvent=new LoadEvent(LoadEvent.LOADXML);
- sendevent.result=myxml;
- this.dispatchEvent(sendevent);
- }
- private function errorhandle(e:Event):void
- {
- throw new Error("加载失败");
- }
- }
- }
自定义事件类:为LoadEvent,通过这个事件顺便带一个参数result
- package
- {
- import flash.events.Event;
- public class LoadEvent extends Event
- {
- public static const LOADXML:String="loadxml";
- public var result:XML;
- public function LoadEvent(type:String,bubbles:Boolean=false,cancelable:Boolean=false)
- {
- super(type,false,false);
- }
- override public function clone():Event
- {
- return new LoadEvent(LoadEvent.LOADXML);
- }
- }
- }
测试时候的XML文件。为new.xml
- <?xml version="1.0" encoding="gb2312"?>
- <menu>
- <item type="news">
- <title>Adobe 开发技术日</title>
- <contect>
- <!--[CDATA[可以方便快捷的找到您需要的工具.播放按钮放在窗口的上方中部,清晰可见方便你播放,测试和优化你的工程.当你按下按钮时,编辑器将高亮你的游戏窗口而减暗其余的东西,让你更专心的创建发挥你的灵感.可设定位置,缩放和旋转的定制递增量捕捉.在一定范围内拖拽物体将自动吸附任何物体表面.用我们说的重新设计的旋转工具可以非常方便的在局部坐标系或世界坐标系操作物体. ]]>
- </contect>
- <date>2009-4-15</date>
- </item>
- <item type="news">
- <title>Flash的未来</title>
- <contect>
- <![CDATA[欢迎参与这一次的活动日 adobe公司举办的技术开发日 ]]>
- </contect>
- <date>2009-4-16</date>
- </item>
- <item type="news">
- <title>提倡环保</title>
- <contect>
- <![CDATA[欢迎参与这一次的活动日 adobe公司举办的技术开发日 ]]>
- </contect>
- <date>2009-4-17</date>
- </item>
- <item type="news">
- <title>高兴的闪吧</title>
- <contect>
- <![CDATA[欢迎参与这一次的活动日 adobe公司举办的技术开发日 ]]>
- </contect>
- <date>2009-4-18</date>
- </item>
- <item type="news">
- <title>传教的灵魂</title>
- <contect>
- <![CDATA[欢迎参与这一次的活动日 adobe公司举办的技术开发日 ]]>
- </contect>
- <date>2009-4-18</date>
- </item>
- <item type="news">
- <title>心情之窗</title>
- <contect>
- <![CDATA[欢迎参与这一次的活动日 adobe公司举办的技术开发日 ]]>
- </contect>
- <date>2009-4-18</date>
- </item>
- <item type="news">
- <title>真实故事</title>
- <contect>
- <![CDATA[欢迎参与这一次的活动日 adobe公司举办的技术开发日 ]]>
- </contect>
- <date>2009-4-18</date>
- </item>
- <item type="news">
- <title>难记的命运</title>
- <contect>
- <![CDATA[欢迎参与这一次的活动日 adobe公司举办的技术开发日 ]]>
- </contect>
- <date>2009-4-18</date>
- </item>
- <item type="news">
- <title>窗口故事</title>
- <contect>
- <![CDATA[欢迎参与这一次的活动日 adobe公司举办的技术开发日 ]]-->
- </contect>
- <date>2009-4-18</date>
- </item>
- </menu>