自定义List被选中项的外观
5.13.1.问题
为List 组件中的选中项贴上一个图片
5.13.2.解决方法
覆盖ListBase 类的drawSelectionIndicator 方法并修改由该方法使用的指示器Sprite 对象。
5.13.3.讨论
List 控件通过drawSelectionIndicator 方法为在列表中选中的itemRenderer 创建外观。
该方法的信息如下:
+展开
-ActionScript
override
protected
function drawSelectionIndicator(indicator:Sprite, x:Number, y:Number,width:Number, height:Number, color:uint, itemRenderer:IListItemRenderer):
void
所有的偏移量,大小,色彩信息都可以由x, y, width, height, 和color 属性来设置。第一个参数indicator,是一个画在选中项上的flash.display.Sprite 实例,最后一个参数itemRenderer 是将被选择的条目渲染器。
实现方法的例子添加了一个图片到指示器Sprite 对象,由于当itemRenderer 被撤消选中时sprite 对象被移除和销毁,所以不必担心后面的回收。
除了应用于所有高光的itemRenderer , drawHighlightIndicatory 方法和drawSelectionIndicator 方法功能一样, itemRenderer 被用户鼠标滑过,但不选择,请看:
+展开
-ActionScript
override
protected
function drawHighlightIndicator(indicator:Sprite, x:Number, y:Number,width:Number, height:Number, color:uint, itemRenderer:IListItemRenderer):
void
用一张单独的图片来表现高光,放到itemRenderer 的边缘,并在用户鼠标滑过列表的itemRenderer 时显示。
下面是该技术的完整清单:
+展开
-XML
<?xml version="1.0" encoding="utf-8"?>
<mx:List xmlns:mx="http://www.adobe.com/2006/mxml" width="71" height="48"
backgroundImage="liebiao.png">
<mx:Script>
<![CDATA[
import mx.controls.listClasses.IListItemRenderer;
[Embed("xuanzhong.png")]
private var img:Class;
[Embed("xuanzhong.png")]
private var highlight_img:Class;
override protected function drawHighlightIndicator(indicator:Sprite, x:Number,y:Number, width:Number, height:Number, color:uint,itemRenderer:IListItemRenderer):void {
var this_img:Object = new highlight_img();
indicator.addChild((this_img as DisplayObject));
(this_img as DisplayObject).x =0;//itemRenderer.width -(this_img as DisplayObject).width; 0xA4A3A1
super.drawHighlightIndicator(indicator, x, y+2, width, height, 0xA4A3A1,itemRenderer);
indicator.x=3;
indicator.width=64;
indicator.height=20;
indicator.alpha=1;
indicator.graphics.clear();
}
override protected function drawCaretIndicator(indicator:Sprite, x:Number, y:Number, width:Number, height:Number, color:uint, itemRenderer:IListItemRenderer):void
{
super.drawCaretIndicator(indicator, 0, y, 65, 20, 0xffffff,itemRenderer);
indicator.x=3;
indicator.width=64;
indicator.height=20;
indicator.alpha=1;
indicator.graphics.clear();
}
override protected function drawSelectionIndicator(indicator:Sprite, x:Number,y:Number, width:Number, height:Number, color:uint,itemRenderer:IListItemRenderer):void{
var this_img:Object = new img();
indicator.addChild((this_img as DisplayObject));
(this_img as DisplayObject).x = 0;//itemRenderer.width - (this_img as DisplayObject).width
super.drawSelectionIndicator(indicator, x, y+2, width,height, 0xA42011,itemRenderer);
indicator.x=3;
indicator.width=64;
indicator.height=20;
indicator.alpha=1;
indicator.graphics.clear();
}
]]>
</mx:Script>
</mx:List>