C# 如何控制图像并在listview中创建动画?
我目前正在使用一个收集图像的列表视图。我做得很成功,但我现在想给它添加一个动画。我首先让图像的不透明度完全为0,然后我希望用C# 如何控制图像并在listview中创建动画?,c#,xamarin,xamarin.forms,C#,Xamarin,Xamarin.forms,我目前正在使用一个收集图像的列表视图。我做得很成功,但我现在想给它添加一个动画。我首先让图像的不透明度完全为0,然后我希望用.FadeTo(11000,Easing.SinIn)来增加它一旦收集了图像 因为我使用的是listview,所以我不能使用x:name,所以我不知道如何使用listview解决这个问题 这是我当前的代码: <ListView x:Name="listview" > <ListView.ItemTemplate>
.FadeTo(11000,Easing.SinIn)来增加它代码>一旦收集了图像
因为我使用的是listview,所以我不能使用x:name,所以我不知道如何使用listview解决这个问题
这是我当前的代码:
<ListView x:Name="listview" >
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<ViewCell.View>
<AbsoluteLayout>
<Image Source = "{Binding image}" Opacity = "{Binding animation}"/>
</AbsoluteLayout>
</ViewCell.View>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
将图像添加到列表时:
myList.add (new info()
{
image = theitems["image"].ToString(),
isImageShowing = true
});
代码运行并显示图像,但我看不到动画。在日志中,当我收集3张图像时,我得到了3次“设置”。完成此操作的最后一部分是将xaml中的公共字符串图像{get;set;}
/my
连接到CustomImage
,如果我没有弄错的话,但我不确定如何实现这一点 因为需要在图像上执行动画,所以我建议在图像
类的扩展上定义动画
我还建议您在扩展上创建一个可绑定属性,以通过动画切换可见性
像下面这样
public class CustomImage : Image
{
public static readonly BindableProperty IsImageShowingProperty = BindableProperty.Create("IsImageShowing", typeof(bool), typeof(CustomImage), false, BindingMode.Default, propertyChanged: OnImageShowingChanged);
private static void OnImageShowingChanged(BindableObject bindable, object oldValue, object newValue)
{
if(newValue == null) return;
var img = (CustomImage)bindable;
var b = (bool)newValue;
if(b)
{
img.ShowImage();
}
else
{
img.HideImage();
}
}
public bool IsImageShowing
{
get { return (bool)GetValue(IsImageShowingProperty); }
set { SetValue(IsImageShowingProperty, value); }
}
public void ShowImage()
{
this.FadeTo(1, 1000, Easing.SinIn);
}
public void HideImage()
{
this.FadeTo(0, easing: Easing.SinIn);
}
}
现在,在Info
类中,不要使用Animation
integer属性,而是创建一个bool属性来切换图像动画并将其绑定到IsImageShowingProperty
。将数据添加到列表视图.ItemsSource
后,检查并切换每个项目的布尔属性,它将运行动画
还要确保在Info
类上实现INotifyPropertyChanged
更新:
如果需要在加载数据时运行动画,请将其添加到CustomImage
类中
protected override void OnBindingContextChanged()
{
base.OnBindingContextChanged();
if(IsImageShowing)
{
this.ShowImage();
}
}
另外,在初始化自定义图像时,请确保将图像不透明度设置为0,否则您将看不到淡入效果非常感谢您的回答!我会马上检查并测试它,以便更接近解决这个问题。将在几分钟后更新帖子以显示我的进度。我现在更新了帖子,尝试使用您的CustomImage代码解决此问题。我如何将字符串图像连接到CustomImage/我在xaml中拥有的图像?我认为这一切都正常,但正如您在CustomImage
类中看到的那样,IsImageShowing
时会出现动画属性更改。因此,如果您最初将info类上的isImageShowing
属性设置为false。然后通过并切换为true,您将看到动画运行。
public class CustomImage : Image
{
public static readonly BindableProperty IsImageShowingProperty = BindableProperty.Create("IsImageShowing", typeof(bool), typeof(CustomImage), false, BindingMode.Default, propertyChanged: OnImageShowingChanged);
private static void OnImageShowingChanged(BindableObject bindable, object oldValue, object newValue)
{
if(newValue == null) return;
var img = (CustomImage)bindable;
var b = (bool)newValue;
if(b)
{
img.ShowImage();
}
else
{
img.HideImage();
}
}
public bool IsImageShowing
{
get { return (bool)GetValue(IsImageShowingProperty); }
set { SetValue(IsImageShowingProperty, value); }
}
public void ShowImage()
{
this.FadeTo(1, 1000, Easing.SinIn);
}
public void HideImage()
{
this.FadeTo(0, easing: Easing.SinIn);
}
}
protected override void OnBindingContextChanged()
{
base.OnBindingContextChanged();
if(IsImageShowing)
{
this.ShowImage();
}
}