Xamarin图片有时不是里面的ListView下载

问题描述 投票:0回答:1

我有两列,其中最左边的包含这样一个<Image>一个ListView:

<ListView.ItemTemplate>
    <DataTemplate>
        <ViewCell>
            <ViewCell.View>
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="0.5*" />
                        <ColumnDefinition Width="0.5*" />
                    </Grid.ColumnDefinitions>
                    <Grid.RowDefinitions>
                    </Grid.RowDefinitions>
                    <AbsoluteLayout Grid.Column="0" Grid.Row="0">
                        <Image 
                            HeightRequest="130" 
                            Aspect="AspectFill" 
                            Source="{Binding DynamicOfferImage}" 
                            local:ImageBinding.URL="{Binding DynamicOfferURL}" 
                            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>
                        <StackLayout IsVisible="{Binding IsRedeemed}" Margin="20" AbsoluteLayout.LayoutBounds="1,1,1,1" AbsoluteLayout.LayoutFlags="All">
                            <ContentView Padding="3" BackgroundColor="#d9534f">
                                <Label Text="{loc:_ S=LoginIsRedeemed}" FontSize="Medium" TextColor="#ffffff" HorizontalOptions="Center"></Label>
                            </ContentView>
                        </StackLayout>
                    </AbsoluteLayout>

                    <StackLayout Grid.Column="1" Grid.Row="0">
                        <!-- Text here, irrelevant to question -->
                    </StackLayout>
                </Grid>
            </ViewCell.View>
        </ViewCell>
    </DataTemplate>
</ListView.ItemTemplate>

<Image>Source属性绑定到托管在亚马逊S3 JPEG图像的URL。问题是大多数的这些图像被下载罚款时间,但是有时候一个图像,甚至所有图像,将无法下载(或不显示?)

这个问题不会消失,直到用户将重新安装应用程序。即使重新启动应用程序不计,它必须是一个实际的重新安装。

下面是这是什么最终看起来像在一些情形下样机:enter image description here

任何帮助非常感谢!

注意:这不是Xamarin Forms ListView Images Sometimes Displays, Sometimes Doesn't (UWP)的副本,如描述的情况是不同的。

c# xamarin xamarin.forms xamarin.ios xamarin.android
1个回答
0
投票

我最终采取G.hakim的意见,并决定聘请FFImageLoading(通过NuGet包)的图像。这是非常简单的,虽然我不得不使用Xamarin.Android稍微旧版本。与最新版本(2.4.4.859)发生一些奇怪的链接错误,不得不回去2.4.1。它的作品真的很好,甚至无论哪种方式,增加了一个小动画在Xamarin.iOS图像。

这里是我的代码之前:

<Image 
    HeightRequest="130" 
    Aspect="AspectFill" 
    Source="{Binding DynamicOfferImage}" 
    local:ImageBinding.URL="{Binding DynamicOfferURL}" 
    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 DynamicOfferImage}"
    local:ViewBinding.URL="{Binding DynamicOfferURL}">
    <ffimageloading:CachedImage.GestureRecognizers>
        <TapGestureRecognizer
            Tapped="OnViewTapGestureRecognized"
            NumberOfTapsRequired="1" />
    </ffimageloading:CachedImage.GestureRecognizers>
</ffimageloading:CachedImage>

为了它与我的工作TapGestureRecognizer我改投在方法的((Image)sender)((View)sender)因为FFImageLoading的CachedImage类实际上并没有继承Image,它继承View。事情要记住,如果你有手势,甚至自定义绑定。

除此之外,这是很插件和播放,我感到很满意的结果。

© www.soinside.com 2019 - 2024. All rights reserved.