} } function getPreferredHeight(Void) : Number { //因为我们的初始五张图片的宽高分别为128 * 128 //所以这儿将返回值设为128 return 128; } }
看了上面的代码后大家发现有很多变化,这些变化是因为考虑到代码的执行效率和条理性才进行改动的。可能疑问最多的就是怎么冒出了一个createChildren()方法。createChildren()是UIComponet类的一个方法,并且在UIComponet类的构造函数内执行。因为LogoAd类扩展了UIComponet类,所以createChildren()方法也是自动执行的。也就是说执行顺序是createChildren(),LogoAd构造函数然后才是CellRenderer API 的四个方法,并且createChildren()方法只执行一次。另外我去掉了setSize()和getPreferredWidth()方法。getPreferredWidth()方法只对menu组件起作用,所以把它去掉。setSize()方法不是一次执行,并且他做的工作没有必要每次渲染的时候都执行这样会消耗cup资源,所以把它去掉。现在解释一下整个执行过程:首先建立一loader对象作为单元格的填充内容(createChildren方法),然后调整loader对象的位置、宽和高(size方法),将size方法放在createChildren中意味着size方法只执行一次,但是只要执行一次就够了。最后在loader组件载入图片,图片地址来自list组件的label值(setValue方法),因为我们预先的五张图片高度是128px,所以将loader组件的最佳高度设为128px(getPreferredHeight方法)。
8、将LogoAd.as文件保存,在LogoAd.fla文件中,在组件面板里将loader组件拖入舞台,然后删掉,测试影片,效果如图。
要理解CellRenderer API的最好方法就是跟着实例一步步地练习,另外对于Flash MX 2004的组件架构要有一定的理解。本教程只涉及到了实现CellRenderer API的一点皮毛知识。对于CellRenderer API更复杂的应用读者可以自行钻研。本人水平有限,文章中可能存在错误,请大家批评指正。
作业:如果图片太大,载入时有一小段时间会出现空白,给加上一个进度条会让用户更愉悦一些。你能加上一个预载进度条吗?
源文件
|