我最终接受了G.hakim的建议,决定使用FFImageLoading(通过NuGet软件包)来加载图像。虽然我不得不为Xamarin.Android使用稍微旧一点的版本,但它非常简单。最新版本(2.4.4.859)出现一些奇怪的链接器错误,必须返回到2.4.1。无论哪种方式,它都非常有效,甚至为Xamarin.iOS上的图像添加了一点动画。
<Image
HeightRequest="130"
Aspect="AspectFill"
Source="{Binding ImageURL}"
local:ImageBinding.URL="{Binding LinkURL}"
AbsoluteLayout.LayoutBounds="1,1,1,1"
AbsoluteLayout.LayoutFlags="All">
<Image.Aspect>
<OnPlatform x:TypeArguments="Aspect">
<On Platform="iOS">AspectFit</On>
<On Platform="Android">AspectFit</On>
</OnPlatform>
</Image.Aspect>
<Image.GestureRecognizers>
<TapGestureRecognizer
Tapped="OnImageTapGestureRecognized"
NumberOfTapsRequired="1" />
</Image.GestureRecognizers>
</Image>
为了让FFImageLoading工作,您必须将其添加到根目录中
<ContentPage>
要素:
xmlns:ffimageloading="clr-namespace:FFImageLoading.Forms;assembly=FFImageLoading.Forms"
xmlns:fftransformations="clr-namespace:FFImageLoading.Transformations;assembly=FFImageLoading.Transformations"
然后我就能做到这一点:
<ffimageloading:CachedImage
AbsoluteLayout.LayoutBounds="1,1,1,1"
AbsoluteLayout.LayoutFlags="All"
HeightRequest="130"
DownsampleToViewSize="true"
Source="{Binding ImageURL}"
local:ViewBinding.URL="{Binding LinkURL}">
<ffimageloading:CachedImage.GestureRecognizers>
<TapGestureRecognizer
Tapped="OnViewTapGestureRecognized"
NumberOfTapsRequired="1" />
</ffimageloading:CachedImage.GestureRecognizers>
</ffimageloading:CachedImage>
为了让它与我的
TapGestureRecognizer
((Image)sender)
将该方法转换为
((View)sender)
CachedImage
FFImageLoading中的类实际上不是从
Image
,它继承自
View
. 如果你有手势,甚至是自定义绑定,一定要记住。
除此之外,它非常即插即用,我对结果非常满意。