网址在轮播视图上丢失图片

时间:2019-03-29 21:52:34

标签: android firebase xamarin carousel

我正在使用Xamarin Form制作一个应在iOS和Android上都可以使用的应用程序,我有一个带有图像的轮播视图,因此我尝试使用此块创建一个带有单元格的轮播:URL

在android上的iOS上正常工作时,该单元不断崩溃,因此我更改了一个仅包含一个在URL上具有绑定的图像的单元 现在一切正常,但轮播机中偶尔会丢失声音图像。

我想念什么吗?是否有用于xamarin形式的块包,用于缓存以正确显示所有图像?

谢谢

制作FFImage.Loading无法在Android上正常运行

android单元格

<?xml version="1.0" encoding="UTF-8"?>
<ContentView xmlns="http://xamarin.com/schemas/2014/forms" 
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
             xmlns:ffimage="clr-namespace:FFImageLoading.Forms;assembly=FFImageLoading.Forms"
             xmlns:local="clr-namespace:CTSApp.Utility" 
             x:Class="CTSApp.Celle.cella_volantino_android">
    <ContentView.Content>
         <ScrollView>
            <StackLayout HorizontalOptions="FillAndExpand" VerticalOptions="CenterAndExpand">
                <local:PinchToZoomContainer>
                    <local:PinchToZoomContainer.Content>
                  <Image Source="{Binding url}" HorizontalOptions = "FillAndExpand" 
                         VerticalOptions = "FillAndExpand" />
                   </local:PinchToZoomContainer.Content>
                </local:PinchToZoomContainer>
            </StackLayout>
        </ScrollView>
    </ContentView.Content>
</ContentView>

iOS单元格

<?xml version="1.0" encoding="UTF-8"?>
<ContentView xmlns="http://xamarin.com/schemas/2014/forms" 
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:ffimage="clr-namespace:FFImageLoading.Forms;assembly=FFImageLoading.Forms"
             xmlns:fftransf="clr-namespace:FFImageLoading.Transformations;assembly=FFImageLoading.Transformations"

    xmlns:local="clr-namespace:CTSApp.Utility" x:Class="CTSApp.Celle.cella_volantino">
        <ContentView.Content>
            <ScrollView>
                <StackLayout HorizontalOptions="FillAndExpand" VerticalOptions="CenterAndExpand">
                     <local:PinchToZoomContainer>
                        <local:PinchToZoomContainer.Content>
                            <ffimage:CachedImage Grid.RowSpan="2" Aspect="AspectFill"
                                     Source="{Binding url}"
                                     DownsampleToViewSize="false"
                                     LoadingPlaceholder="placeholder.png"
                                     ErrorPlaceholder="placeholder.png"
                                     VerticalOptions="FillAndExpand"
                                     HorizontalOptions="FillAndExpand">
                                <ffimage:CachedImage.CacheDuration>
                                    <x:TimeSpan>0,0,15,0</x:TimeSpan>
                                </ffimage:CachedImage.CacheDuration>
                          </ffimage:CachedImage>
                        </local:PinchToZoomContainer.Content>
                    </local:PinchToZoomContainer>
                </StackLayout>
            </ScrollView>
        </ContentView.Content>
    </ContentView>

感谢帮助。

编辑

这是我的主要活动:

using Android.Content.PM;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Android.OS;
using Plugin.FirebasePushNotification;
using Firebase;
using Plugin.CurrentActivity;
using Plugin.Permissions;
using Xamarin;
using Xamarin.Forms;
using Android.Content.Res;
using SegmentedControl.FormsPlugin.Android;
using ZXing.Mobile;

namespace CTSApp.Droid
{
    [Activity(Label = "CTSApp", Icon = "@drawable/ic_launcher", Theme = "@style/MyTheme.Splash", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
    public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity

    {
        protected override void OnCreate(Bundle bundle)
        {

            TabLayoutResource = Resource.Layout.Tabbar;
            ToolbarResource = Resource.Layout.Toolbar;

            base.OnCreate(bundle);
            global::Xamarin.Forms.Forms.Init(this, bundle);


            MobileBarcodeScanner.Initialize(Application);
            Rg.Plugins.Popup.Popup.Init(this, bundle);
            ZXing.Net.Mobile.Forms.Android.Platform.Init();
            FFImageLoading.Forms.Droid.CachedImageRenderer.Init(enableFastRenderer: true);
            Plugin.CurrentActivity.CrossCurrentActivity.Current.Activity = this;
            CrossCurrentActivity.Current.Init(this, bundle);
            SegmentedControlRenderer.Init();
            FirebasePushNotificationManager.ProcessIntent(Intent);

            LoadApplication(new App());


        }


        public override void OnRequestPermissionsResult(int requestCode, string[] permissions, Permission[] grantResults)
        {
            Plugin.Permissions.PermissionsImplementation.Current.OnRequestPermissionsResult(requestCode, permissions, grantResults);
            PermissionsImplementation.Current.OnRequestPermissionsResult(requestCode, permissions, grantResults);
            global::ZXing.Net.Mobile.Forms.Android.PermissionsHandler.OnRequestPermissionsResult (requestCode, permissions, grantResults);           

        }
    }
}

FFImageLoader版本2.4.3.840 Xamarin表格版本2.50

编辑2

也许我已经找到问题了,这是我正在使用的新的确定性单元格

<?xml version="1.0" encoding="UTF-8"?>
<ContentView xmlns="http://xamarin.com/schemas/2014/forms" 
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
             xmlns:ffimage="clr-namespace:FFImageLoading.Forms;assembly=FFImageLoading.Forms"
             xmlns:local="clr-namespace:CTSApp.Utility" 
             x:Class="CTSApp.Celle.cella_volantino_android">
    <ContentView.Content>
         <ScrollView>
            <StackLayout HorizontalOptions="FillAndExpand" VerticalOptions="CenterAndExpand">
                <local:PinchToZoomContainer>
                    <local:PinchToZoomContainer.Content>
                  <Image Source="{Binding url}" HorizontalOptions = "FillAndExpand" 
                         VerticalOptions = "FillAndExpand" >
                        <Image.Source>
                        <UriImageSource Uri="{Binding url}" 
                            CacheValidity="14" 
                            CachingEnabled="true"/>
                        </Image.Source>
                    </Image>
                   </local:PinchToZoomContainer.Content>
                </local:PinchToZoomContainer>
            </StackLayout>
        </ScrollView>
    </ContentView.Content>
</ContentView>

现在我正在使用带有缓存的标准图像,现在在iOS上一切正常,在android上我从某些页面获取错误

  

ImageLoaderSourceHandler:无法检索图像或图像数据无效:Uri:

显然没有加载,我在这里按照教程进行操作 https://doumer.me/resolve-image-loading-error-in-xamarin-forms/

仍然没有运气,但是如果我水平转动手机,图像加载正确,我真的不知道了

此处的视频

https://streamable.com/rk1rv

1 个答案:

答案 0 :(得分:0)

以下是带有 CarouselView 的示例,用于显示图像。所有示例都可以在IOS和Android上使用。如果要使用ffimage:CachedImage,请用Image代替。

这是 Xaml 代码:

<StackLayout>
    <CarouselView x:Name="carousel" ItemsSource="{Binding uris}">
        <CarouselView.ItemTemplate>
            <DataTemplate>
                <Image
                    x:Name="PlantPicture"
                    Source="{Binding uri}"
                    HorizontalOptions="Center"
                    VerticalOptions="Center"
                    WidthRequest="150"
                    HeightRequest="150">
                </Image>
            </DataTemplate>
        </CarouselView.ItemTemplate>
    </CarouselView>
</StackLayout>

型号代码:

public class FloraData
{
    public class StringData
    {
        public string uri { get; set; }
    }

    public List<StringData> uris { get; set; }

    public FloraData()
    {
        uris = new List<StringData>() { new StringData() { uri = "https://static.inaturalist.org/photos/504134/medium.jpg?1379628103" },
                                            new StringData() { uri = "https://static.inaturalist.org/photos/8784478/small.jpg?1499006293" },
                                            new StringData() { uri = "https://api.idigbio.org/v2/media/23cbb9eb2750e80848ac95b5d2919323?size=thumbnail" },
                                            new StringData() { uri = "https://api.idigbio.org/v2/media/c085496285be91ace0768eb517cc704b?size=thumbnail" },
                                            new StringData() { uri = "http://swbiodiversity.org/imglib/arizona/IND/IND-0049/IND-0049216_1491615930_tn.jpg" }};
    }
}

最后, ContentPage.cs BindingContext:

FloraData floraData = new FloraData();
carousel.BindingContext = floraData;