我提供你的样本代码,我已经做到了。我想要做的是,当我点击向下按钮时,Tilelist会慢慢滚动并更改数据。虽然点击向下按钮改变了数据,但没有显示任何效果。我已经在网上搜索了很多,但我找不到更好的方法。如果可能的话,请给出最好的方法。
以下是我到目前为止所做的示例代码
<?xml version="1.0"?><mx:Sequence id="dataChangeEffectSequence">
<mx:Move duration="1500" easingFunction="{Elastic.easeOut}" perElementOffset="20"/>
</mx:Sequence>
<mx:Script>
<![CDATA[
import mx.effects.easing.Elastic;
import mx.controls.Alert;
import mx.events.ScrollEvent;
private var arrImage:Array = [
{source:"Images/1.png",tooltip:"1"},
{source:"Images/2.png",tooltip:"2"},
{source:"Images/3.png",tooltip:"3"},
{source:"Images/4.png",tooltip:"4"},
{source:"Images/5.png",tooltip:"5"},
{source:"Images/6.png",tooltip:"6"},
{source:"Images/7.png",tooltip:"7"},
{source:"Images/8.png",tooltip:"8"},
{source:"Images/9.png",tooltip:"9"},
{source:"Images/10.png",tooltip:"10"}];
public function onInit():void
{
tileList.dataProvider = arrImage;
}
public function btnUP_click():void
{
var scrollPosition:int = tileList.verticalScrollPosition - 1;
if(scrollPosition >= 0)
{
tileList.verticalScrollPosition = scrollPosition;
}
else
{
tileList.verticalScrollPosition = 0;
}
}
public function btnDown_click():void
{
var scrollPosition:int = tileList.verticalScrollPosition + 1;
if(scrollPosition <= tileList.maxVerticalScrollPosition)
{
tileList.verticalScrollPosition = scrollPosition;
}
}
]]>
</mx:Script>
<mx:Button width="100" label="UP" id="btnUP" click="{btnUP_click();}" />
<mx:TileList id="tileList" dataProvider="{arrImage}" columnCount="1" columnWidth="100"
useRollOver="false" selectable="false" backgroundAlpha="0" borderStyle="none"
rowHeight="65" verticalScrollPolicy="off" horizontalScrollPolicy="off"
itemsChangeEffect="{dataChangeEffectSequence}" >
<mx:itemRenderer>
<mx:Component>
<mx:VBox width="100%" height="100%" horizontalAlign="center" verticalGap="0"
verticalAlign="middle" horizontalScrollPolicy="off" verticalScrollPolicy="off">
<mx:Script>
<![CDATA[
import mx.controls.Alert;
override public function set data(value:Object):void
{
if(value !=null)
{
super.data = value;
if(img !=null)
{
img.source = data.source;
img.toolTip = data.tooltip;
}
}
}
]]>
</mx:Script>
<mx:Image id="img" showEffect="{outerDocument.dataChangeEffectSequence}" />
</mx:VBox>
</mx:Component>
</mx:itemRenderer>
</mx:TileList>
<mx:Button width="100" label="DOWN" id="btnDown" click="{btnDown_click();}" />
</mx:Application>提前谢谢..
发布于 2011-12-14 21:01:02
将TileList放入容器(如Canvas或VBox)中,并强制使其为所有项目的全高(如果您有variableRowHeight,这可能会有点复杂)。然后处理VBox上的滚动,而不是TileList。
还要注意,作为itemRenderer,VBox有很多开销。您可能需要考虑将Image放入其中。它具有horizontalAlign和verticalAlign属性。
发布于 2011-12-14 20:37:57
您可以使用List等spark组件,并将useVirtualLayout设置为true。
您的代码的问题在于,在更新dataprovider时,会创建并显示每个项目渲染器。将useVirtualLayout设置为true时,仅创建显示的项目,并在滚动时回收这些项目。然后,您可以监听项目呈现器的dataChange事件以启动转换。
https://stackoverflow.com/questions/8503424
复制相似问题