Car*_*gez 2 c# xaml xamarin xamarin.forms lottie
所以我在列表视图中使用动画,我想随时播放一次,所以我想控制它。
这是图书馆https://github.com/martijn00/LottieXamarin
我有一堂课:
public class Info {
public bool ReadMoreIconVisibility {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
和xaml:
<forms:AnimationView Animation = "animationone.json" Loop = "false" IsVisible="{Binding ReadMoreIconVisibiliy}"/>
Run Code Online (Sandbox Code Playgroud)
我可以成功地使用我的 xaml 来隐藏/不隐藏我的动画。但是我如何达到AnimationView.Play()方法,只有在我命名我的标签时才可用x:name。
我如何利用 mvvm 架构师来Play制作我的动画?
我无法使用命令参数,因为它已被同一列表视图中的另一个项目使用:
<Button Command="{Binding Click}" CommandParameter="{x:Reference otherItemInListView}"/>
Run Code Online (Sandbox Code Playgroud)
一种解决方案可能是使用另一个对象扩展命令参数,如果是这样,如何实现?不过,最好有另一种解决方案。
这是一个老问题,但我发布此答案以防万一有人面临同样的问题。
为了在不破坏 MVVM 模式的情况下将 Lottie 与 Xamarin Forms 一起使用,您需要做的是使用 ViewModel 中的绑定来启动和停止动画,创建两个触发器动作,一个播放动画,另一个将进度重置为0 然后暂停动画。或者您可以创建一个触发器来检查
然后在您的 ViewModel 中创建一个 bool 属性,该属性在您要开始导航时设置为 true,而在您要停止时设置为 false。在您的情况下,它是ReadMoreIconVisibiliy。
然后在您的xaml 中使用触发器,请参阅下面的代码。
<lottieForms:AnimationView
Animation="load_complete.json"
Speed="1"
AutoPlay="False">
<lottieForms:AnimationView.Triggers>
<MultiTrigger TargetType="lottieForms:AnimationView">
<MultiTrigger.Conditions>
<BindingCondition Binding="{Binding ReadMoreIconVisibiliy}" Value="True" />
</MultiTrigger.Conditions>
<MultiTrigger.EnterActions>
<actions:StartLottieAnimationTriggerAction />
</MultiTrigger.EnterActions>
<MultiTrigger.ExitActions>
<actions:StopLottieAnimationTriggerAction />
</MultiTrigger.ExitActions>
</MultiTrigger>
</lottieForms:AnimationView.Triggers>
</lottieForms:AnimationView>
Run Code Online (Sandbox Code Playgroud)
StartLottieAnimationTriggerAction代码
public class StartLottieAnimationTriggerAction : TriggerAction<AnimationView>
{
protected override void Invoke(AnimationView sender)
{
sender.PlayAnimation();
}
}
Run Code Online (Sandbox Code Playgroud)
StopLottieAnimationTriggerAction代码
public class StopLottieAnimationTriggerAction : TriggerAction<AnimationView>
{
protected override void Invoke(AnimationView sender)
{
sender.Progress = 0;
sender.PauseAnimation();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
785 次 |
| 最近记录: |