我的Xamarin Forms 5应用程序将允许用户上传他们自己的图像,这些图像可以很大。我注意到大图像需要很长时间才能显示,所以我安装了FFImageLoading
,并按照他们的Github页面https://github.com/luberda-molinet/FFImageLoading/wiki/Xamarin.Forms-API上的说明进行操作。
具体来说,我安装了以下包:
Xamarin.FFImageLoading Version="2.4.11.982"
Xamarin.FFImageLoading.Forms Version="2.4.11.982"
Xamarin.FFImageLoading.Svg.Forms Version="2.4.11.982"
Xamarin.FFImageLoading.Transformations Version="2.4.11.982"
我也这样初始化它:
- 在Android下,在
MainActivity.cs
的OnCreate
方法中,我增加了FFImageLoading.Forms.Platform.CachedImageRenderer.Init(enableFastRenderer:true);
和FFImageLoading.Forms.Platform.CachedImageRenderer.InitImageViewHandler();
- 在iOS下,在
AppDelegate.cs
的FinishedLaunching()
方法中,我增加了FFImageLoading.Forms.Platform.CachedImageRenderer.Init();
和FFImageLoading.Forms.Platform.CachedImageRenderer.InitImageSourceHandler();
我第一次尝试它没有改变任何在我的XAML文件,这意味着我使用常规的Image
控件和图像将不显示。
然后我尝试了以下操作,但我什么也没看到:
...
xmlns:ffil="clr-namespace:FFImageLoading.Forms;assembly=FFImageLoading.Forms"
...
<ffil:CachedImage
Source="{Binding FileUrl}"
DownsampleWidth="150"
DownsampleToViewSize="True"/>
重要:
我还想提到的是,图像显示在CollectionView
控件和在所有情况下,他们的来源是一个URL,而不是一个本地路径。
你知道这里的问题是什么以及如何解决它吗?
我知道FFImageLoading不再维护了。许多应用程序仍在使用该软件包,但请记住,报告的开放问题很可能不会得到修复。很遗憾,因为这是Xamarin Forms中最受欢迎的软件包之一,但看起来我们必须开始寻找替代品了。
祝你好运。
我检查了你的步骤,你是按照说明做的。显然,你的步骤是正确的,我设法用CollectionView显示image{using URL}
,因为你说,希望能给你一些启发。
模型:MyModel.cs
public class MyModel
{
public int id { get; set; }
public string FileUrl { get; set; }
}
视图:MainPage.xaml
<CollectionView ItemsSource="{Binding MyModels}">
<CollectionView.ItemsLayout>
<GridItemsLayout Orientation="Vertical" Span="2" />
</CollectionView.ItemsLayout>
<CollectionView.ItemTemplate>
<DataTemplate>
<ContentView Padding="0">
<ffil:CachedImage
Source="{Binding FileUrl}"
DownsampleWidth="150"
DownsampleToViewSize="True"/>
</ContentView>
</DataTemplate>
</CollectionView.ItemTemplate>
</CollectionView>
在后台绑定ViewModel:
BindingContext = new MainPageViewModel();
ViewModel:MainPageViewModel.cs
public class MainPageViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private ObservableCollection<MyModel> myModels;
public ObservableCollection<MyModel> MyModels
{
get { return myModels; }
set { myModels = value; }
}
public MainPageViewModel()
{
MyModels = new ObservableCollection<MyModel>
{
new MyModel{id = 1, FileUrl = "http://loremflickr.com/600/600/nature?filename=simple.jpg"},
new MyModel{id = 2, FileUrl ="http://loremflickr.com/600/600/nature?filename=simple.jpg"},
new MyModel{id = 3, FileUrl = "http://loremflickr.com/600/600/nature?filename=simple.jpg"},
new MyModel{id = 4, FileUrl ="http://loremflickr.com/600/600/nature?filename=simple.jpg"},
new MyModel{id = 5, FileUrl = "http://loremflickr.com/600/600/nature?filename=simple.jpg"},
new MyModel{id = 6, FileUrl ="http://loremflickr.com/600/600/nature?filename=simple.jpg"}
};
}
}
更新:在Android上,它运行得很好。然而,在iOS中已经有一个问题:github.com/luberda-molinet/FFImageLoading/issues/1498