我认为我的问题是针对高级 flex 开发人员或专家的。我的任务相对简单:我需要构建某种水平的“图库”组件,而新的 Apache 4.10 SDK 中的新DataNavigator 最适合此任务。换句话说,我需要与具有特定 INavigatorLayout 的 DataNavigator 相同 - 与CarouselLayout相同,但要简单得多 - 没有任何透视,但项目之间的过渡平滑。可能已经存在这样的布局吗?
感谢提前。安德鲁。
我认为我的问题是针对高级 flex 开发人员或专家的。我的任务相对简单:我需要构建某种水平的“图库”组件,而新的 Apache 4.10 SDK 中的新DataNavigator 最适合此任务。换句话说,我需要与具有特定 INavigatorLayout 的 DataNavigator 相同 - 与CarouselLayout相同,但要简单得多 - 没有任何透视,但项目之间的过渡平滑。可能已经存在这样的布局吗?
感谢提前。安德鲁。
好吧,我找到了令我满意的解决方案,它对我有用,但主要思想:
package
{
import com.greensock.TweenLite;
import spark.layouts.HorizontalLayout;
import spark.layouts.supportClasses.INavigatorLayout;
import mx.core.IVisualElement;
/**
* @author Andrew
*/
public class LobbyNavigatorLayout3 extends HorizontalLayout implements INavigatorLayout
{
public function LobbyNavigatorLayout3()
{
}
private var _selectedElement:IVisualElement;
public function get selectedElement() : IVisualElement
{
return _selectedElement;
}
public function get selectedIndex() : int
{
return target.getElementIndex(_selectedElement);
}
public var ttt:Number = 0;
public function set selectedIndex(value : int) : void
{
if (!target) return;
var firstEl:IVisualElement = target.getElementAt(0);
if (!firstEl) return;
var shift:Number = (600 + gap) * value;
TweenLite.to(this, 1, {ttt:shift, onUpdate:function ():void {
updateDisplayList(target.width, target.height);
}} );
_selectedElement = target.getElementAt(value);
}
override public function updateDisplayList(unscaledWidth : Number, unscaledHeight : Number) : void
{
super.updateDisplayList(unscaledWidth, unscaledHeight);
for (var i : int = 0; i < target.numElements; i++)
{
var el:IVisualElement = target.getElementAt(i);
el.setLayoutBoundsPosition(el.x - ttt, 0);
}
}
}
}
需要说这是为了 useVirtualLayout = false; 需要一些额外的工作来解决这个问题,但它现在适合我,如果你觉得你能够做到这一点 - 欢迎你!