我有一个自定义动画,可以扩展TableView中的Cell。我还会根据需要刷新动画之前/之后的tableView大小。这适用于UWP,我还没有Mac,所以我无法在IOS上测试它。
这在Android上根本不起作用。它不会刷新tableRoot来更新它的大小,也不会播放扩展的动画。
我说的是第二部分,因为当我将桌面视图锁定到完整尺寸时它不会播放。
动画本身非常简单:
private void AnimateLinearRowAppear(VisualElement visual, double targetHeight = 40, TableRoot _tableRoot, bool visible)
{
visual.IsVisible = visible;
TableRootRefresher(_tableRoot);
Animation _animation;
_animation = new Animation(
(d) => visual.HeightRequest = d, 0, targetHeight);
_animation.Commit(visual, "The Animation", 16, 250, Easing.Linear, (target, b) =>
{
_animation = null;
});
}
任何人都有任何关于它为什么不能在Android上运行的想法?
除非我误认为this用于跨平台开发。
我是否必须编写一个界面并以特定于平台的方式调用我的每个动画?
哦,这是Xamarin 2.3.4.270的最新版本。
提前感谢您的帮助!
我从特定选择器或开关等事件中调用动画。
Switch.toggled += (sender, e) =>
{
AnimationChooser(celltochange,switch.toggle, tableRootCellIsPartOf);
}
AnimationChooser决定我们是否正在播放正在播放或消失的动画,并且工作正常。
private void AnimationChooser(Cell celltoChange, bool stateOfSwitch, TableRoot _tableRoot)
{
var visual = (celltoChange as ViewCell).View
if(visual.IsVisible && stateOfSwitch)
{ AnimateLinearRowDissappear(visual, 40 ,_tableRoot, stateOfSwitch);}
else AnimateLinearRowAppear(visual,40,_tableRoot,stateOfSwitch);
}
TableRootRefresher(TableRoot _tableRoot)
{
Var tempRoot = _tableRoot;
_tableRoot = null;
_tableRoot = tempRoot:
}
XAML:
<TableView>
<TableRoot x:Name="root">
<TableSection>
<SwitchCell x:Name="switch"/>
<EntryCell x:Name="toAppear" HieghtRequest="0" IsVisible="False"/>
</TableSection>
</TableRoot>
</TableView>
Here是一个示例项目。
答案 0 :(得分:0)
我使用下面的代码片段动画对我来说很好。
//animate changed the opacity from 1 to 0.
//XFtabbody is my UI elements
var animation = new Animation(v => XFTabBody.Opacity = v, 1, 0);
Action<double, bool> finished = animate;
animation.Commit(XFTabBody, "aa", 0, 100, Easing.Linear, finished);
void animate(double d, bool b)
{
XFTabBody.Children.Clear();
}