Изображения Xamarin иногда не загружаются внутри ListView

Пол из Ткань здесь. В настоящее время Beta поддерживает только развертывание развертывания по времени. Приятно знать, что вам понравится, если бы это было добавлено, хотя!

0
задан O.H. 18 January 2019 в 19:33
поделиться

1 ответ

В итоге я принял совет Г. Хакима и решил использовать 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), потому что класс CachedImage в FFImageLoading не фактически не наследуют от Image, а наследуют от View. О чем следует помнить, если у вас есть жесты или даже пользовательские привязки.

Кроме того, это очень подключи и играй, и я очень доволен результатом.

0
ответ дан O.H. 18 January 2019 в 19:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: