Animation Xamarin形成BoxView动画

Animation Xamarin形成BoxView动画,animation,custom-controls,xamarin.forms,Animation,Custom Controls,Xamarin.forms,我正在尝试创建一个闪烁的BoxView。我创建了一个扩展BoxView的BlinkingBoxView,并添加了一个名为“Blink”的布尔属性。所以我想要的是,每次闪烁改变,它的值为真,我想要开始闪烁动画,如果值为假,停止动画 我需要在C代码中这样做,还是只能像WPF那样使用XAML 这是我的尝试 public class BlinkingBoxView : BoxView { public BlinkingBoxView() : base() {

我正在尝试创建一个闪烁的BoxView。我创建了一个扩展BoxView的BlinkingBoxView,并添加了一个名为“Blink”的布尔属性。所以我想要的是,每次闪烁改变,它的值为真,我想要开始闪烁动画,如果值为假,停止动画

我需要在C代码中这样做,还是只能像WPF那样使用XAML

这是我的尝试

public class BlinkingBoxView : BoxView
{
    public BlinkingBoxView() 
        : base()
    {

    }

    public static readonly BindableProperty BlinkProperty = BindableProperty.Create<BlinkingBoxView, bool>(w => w.Blink, default(bool), BindingMode.TwoWay);

    public bool Blink
    {
        get { return (bool)GetValue(BlinkProperty); }
        set 
        {
            SetValue(BlinkProperty, value);

            var blinkAnimation = new Animation(d => this.FadeTo(0, 750, Easing.Linear)).WithConcurrent(new Animation(d => this.FadeTo(1, 750, Easing.Linear)));

            if (this.Blink)
                this.Animate("Blink", blinkAnimation);
        }
    }
}
公共类BlinkingBoxView:BoxView
{
公共BlinkingBoxView()
:base()
{
}
公共静态只读BindableProperty BlinkProperty=BindableProperty.Create(w=>w.Blink,默认值(bool),BindingMode.TwoWay);
公共场所闪烁
{
获取{return(bool)GetValue(BlinkProperty);}
设置
{
设置值(属性、值);
var blinkAnimation=newanimation(d=>this.FadeTo(0750,Easing.Linear)).WithConcurrent(newanimation(d=>this.FadeTo(1750,Easing.Linear));
如果(这个闪烁)
这个。动画(“闪烁”,闪烁动画);
}
}
}

您应该使用
OnPropertyChanged
覆盖来捕获属性更改:

公共类BlinkingBoxView:BoxView
{
易变波在闪烁;
public static readonly BindableProperty BlinkProperty=BindableProperty.Create(w=>w.Blink,默认值(bool),BindingMode.OneWay);
公共场所闪烁
{
得到
{
返回(bool)GetValue(BlinkProperty);
}
设置
{
设置值(属性、值);
}
}
公共静态只读BindableProperty BlinkDurationProperty=BindableProperty.Create(w=>w.BlinkDuration,500,BindingMode.OneWay);
公共单位闪烁持续时间
{
得到
{
返回(uint)GetValue(BlinkDurationProperty);
}
设置
{
设置值(BlinkDurationProperty,值);
}
}
受保护的重写无效OnPropertyChanged(字符串propertyName)
{
base.OnPropertyChanged(propertyName);
如果(propertyName==BlinkProperty.propertyName)
{
闪烁;
}
如果(propertyName==BlinkDurationProperty.propertyName)
{
如果(正在闪烁)
{
链接(假);
闪烁;
}
}
}
无效链接(布尔应闪烁)
{
如果(应闪烁&!正在闪烁)
{
isBlinking=true;
var blinkAnimation=新动画((d)=>{
不透明度=d;
})、0f、1f、1、0、0、0、0、0、1、0、0、0、0、0、1、0、0、0、0、0、0、0、0、0、0、0、0、0、1、0、0、;
这个.Animate(“BlinkingBoxViewBlink”,blinkAnimation,长度:BlinkDuration,重复:()=>isBlinking);
}
否则,如果(!shouldlblink&&isBlinking)
{
isBlinking=false;
}
}
}

您可以在XAML中使用它,就像在任何其他
视图中一样

您应该使用
OnPropertyChanged
覆盖来捕获属性更改:

公共类BlinkingBoxView:BoxView
{
易变波在闪烁;
public static readonly BindableProperty BlinkProperty=BindableProperty.Create(w=>w.Blink,默认值(bool),BindingMode.OneWay);
公共场所闪烁
{
得到
{
返回(bool)GetValue(BlinkProperty);
}
设置
{
设置值(属性、值);
}
}
公共静态只读BindableProperty BlinkDurationProperty=BindableProperty.Create(w=>w.BlinkDuration,500,BindingMode.OneWay);
公共单位闪烁持续时间
{
得到
{
返回(uint)GetValue(BlinkDurationProperty);
}
设置
{
设置值(BlinkDurationProperty,值);
}
}
受保护的重写无效OnPropertyChanged(字符串propertyName)
{
base.OnPropertyChanged(propertyName);
如果(propertyName==BlinkProperty.propertyName)
{
闪烁;
}
如果(propertyName==BlinkDurationProperty.propertyName)
{
如果(正在闪烁)
{
链接(假);
闪烁;
}
}
}
无效链接(布尔应闪烁)
{
如果(应闪烁&!正在闪烁)
{
isBlinking=true;
var blinkAnimation=新动画((d)=>{
不透明度=d;
})、0f、1f、1、0、0、0、0、0、1、0、0、0、0、0、1、0、0、0、0、0、0、0、0、0、0、0、0、0、1、0、0、;
这个.Animate(“BlinkingBoxViewBlink”,blinkAnimation,长度:BlinkDuration,重复:()=>isBlinking);
}
否则,如果(!shouldlblink&&isBlinking)
{
isBlinking=false;
}
}
}

您可以在XAML中使用它,就像在任何其他
视图中使用它一样

您的问题是什么?我真的不明白。如果BoxView的1个属性为true,我希望使BoxView闪烁,并使其保持闪烁。在该属性为真之前,boxview应该出现和消失(flhasing)。如果该属性变为false,将停止动画,并且boxview将正常显示。谢谢你的问题是什么?我真的不明白。如果BoxView的1个属性为true,我希望使BoxView闪烁,并使其保持闪烁。在该属性为真之前,boxview应该出现和消失(flhasing)。如果该属性变为false,将停止动画,并且boxview将正常显示。非常感谢!我试着按照一些教程/阅读文档,但我无法理解。非常感谢!我试着按照一些教程/阅读文档,但我无法理解。谢谢