TreeView如何拥有展开的过渡动画

树状列表用的很不错 但后来发现都是瞬间展开和缩入的 如果想有过度的动画效果应该怎么放呢? 请问一下 谢谢
已邀请:

谷主

赞同来自:

没有这个功能,你要自行实现了。

zhendery

赞同来自:

        /// <summary>
///
/// </summary>
/// <param name="folderNode"></param>
/// <param name="index"></param>
/// <returns></returns>
int CheckChildren(GTreeNode folderNode, int index)
{
childrenRenderOrder = ChildrenRenderOrder.Descent;
var fromIndex = index + 1;

int cnt = folderNode.numChildren;
for (int i = 0; i < cnt; i++)
{
index++;
GTreeNode node = folderNode.GetChildAt(i);
if (node.cell == null)
CreateCell(node);

if (node.cell.parent == null)
AddChildAt(node.cell, index);

if (node.isFolder && node.expanded)
index = CheckChildren(node, index);
}

EnsureBoundsCorrect();

for (var i = fromIndex; i < numChildren; ++i)
{
var item = GetChildAt(i);
var oldY = item.y;
item.y = oldY - item.height;
item.TweenMoveY(oldY, 0.3f);
}

return index;
}

void RemoveChildrenAfterHide(object _folderNode)
{
GTreeNode folderNode = _folderNode as GTreeNode;
int cnt = folderNode.numChildren;
for (int i = 0; i < cnt; i++)
{
GTreeNode node = folderNode.GetChildAt(i);
if (node.cell != null && node.cell.parent != null)
RemoveChild(node.cell);
}
}

/// <summary>
///
/// </summary>
/// <param name="folderNode"></param>
void HideFolderNode(GTreeNode folderNode)
{
childrenRenderOrder = ChildrenRenderOrder.Descent;
int cnt = folderNode.numChildren;

var distance = 0f;
for (int i = 0; i < cnt; i++)
{
GTreeNode node = folderNode.GetChildAt(i);
if (node.cell != null && node.cell.parent != null)
distance += node.cell.height;

if (node.isFolder && node.expanded)
HideFolderNode(node);
}

var firstItem = folderNode.GetChildAt(0).cell;
var fromIndex = GetChildIndex(firstItem);
for (var i = fromIndex; i < numChildren; ++i)
{
var item = GetChildAt(i);
item.TweenMoveY(item.y - distance, 0.3f);
}

Timers.inst.Add(0.3f, 1, RemoveChildrenAfterHide, folderNode);
}

仅提供一个实现思路,别直接copy然后跟我说不能用啊或者报错啊。
只测试了两级Tree,多级的没测过;快速点击会报错,处理方法也很简单我就不说了。具体怎么实现以及优化,你可以自己思考一下。
当然如果真的有严重问题你可以告诉我。

要回复问题请先登录注册