我在Xamarin Forms中使用自定义ViewCell,如下所示:
server
我还创建了一种方法来动画ViewCell的崩溃动画,它按预期工作。但是,随着等待的覆盖,每个循环迭代持续时间长达100毫秒而不是1毫秒:
public class NativeCell : ViewCell
{
public double Height
{
get
{
return base.Height;
}
set
{
base.Height = value;
ForceUpdateSize();
}
}
}
所以我做了另一个使用秒表进行等待的方法:
async public void Colapse()
{
for (double i = Height; i >= 0; i--)
{
Height = i;
await Task.Delay(1);
}
}
最后一种方法报告等待时间现在通常为1.1ms - 1.3ms。哪个好。但是,高度调整没有做任何事情。或者至少没有触发ForceUpdateSize。
答案 0 :(得分:0)
我们需要在这里解决一些问题。
您必须在列表视图中指定HasUnevenRows
你做不到"加倍i =身高"因为高度将是" -1"
你最后的功能设置高度使用StopWatch并不是真正的异步,因此在功能退出之前你不会更新UI。
由于Task.Delay很慢,我们可以使用带有勾号间隔的设备计时器
以下是我在Android上测试的解决方案。代码在PCL中的ViewCell内部
int currentHeight;
public void Colapse()
{
currentHeight = (int)this.View.Height;
Device.StartTimer(new TimeSpan(100), timerTick);
}
private bool timerTick()
{
if (currentHeight <= 0)
return false;
else
{
Height = currentHeight--;
ForceUpdateSize();
return true;
}
}