Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xamarin 图像加载事件_Xamarin_Xamarin.forms - Fatal编程技术网

Xamarin 图像加载事件

Xamarin 图像加载事件,xamarin,xamarin.forms,Xamarin,Xamarin.forms,我想,当我的图像加载,然后GIF图像应该显示,但当图像加载完成,然后GIF应该消失。 但我不知道该怎么做。请告诉我一步一步的程序 imageWave1.IsVisible = !imageWave1.IsLoading; stackBehindImage.IsVisible = true; imageWave1.IsVisible = true; stackFrontImage.IsVisible = false; 第二个图像显示在GIF应该首先显示的位置,然后直到加载第二个图像 <St

我想,当我的图像加载,然后GIF图像应该显示,但当图像加载完成,然后GIF应该消失。 但我不知道该怎么做。请告诉我一步一步的程序

imageWave1.IsVisible = !imageWave1.IsLoading;
stackBehindImage.IsVisible = true;
imageWave1.IsVisible = true;
stackFrontImage.IsVisible = false;
第二个图像显示在GIF应该首先显示的位置,然后直到加载第二个图像

<StackLayout x:Name="stackFrontImage" Padding="0" HeightRequest="100" Spacing="0" Margin="10" IsVisible="True">
                    <ffimageloading:SvgCachedImage HeightRequest="100"
                                               HorizontalOptions="FillAndExpand" 
                                               VerticalOptions="Center" 
                                               Aspect="AspectFill" 
                                               x:Name="imageWave" 
                                               Source="outlet.gif"
                                               IsVisible="True"
                                               Margin="0"/>
                </StackLayout>

                <StackLayout x:Name="stackBehindImage" HeightRequest="100" Padding="0" Spacing="0" Margin="10" IsVisible="False">

                    <ffimageloading:SvgCachedImage x:Name="imageWave1"
                                               HorizontalOptions="FillAndExpand" 
                                               VerticalOptions="Center" 
                                               Aspect="AspectFill" 
                                               HeightRequest="50"
                                               Margin="0"/>
这是截图,请检查


您应该这样使用:

<ffimageloading:CachedImage HorizontalOptions="Center" 
                VerticalOptions="Center"
                WidthRequest="300" HeightRequest="300"
                DownsampleToViewSize="true"
                LoadingPlaceholder = "loading.png"
                Source = "http://loremflickr.com/600/600/nature?filename=simple.jpg">
</ffimageloading:CachedImage>

在此
加载占位符中,您可以显示加载图像,一旦加载
源图像,它将自动消失

  • 有一个名为
    LoadingPlaceholder
    的属性,可以在图像加载期间使用

  • 每次图像加载之前/之后都会发生两个名为
    DownloadStarted
    Finish
    的事件。您可以使用这两个事件来控制第二个图像的可视性

  • 例如:

        <ffimageloadingsvg:SvgCachedImage  HeightRequest="100"
                                           HorizontalOptions="FillAndExpand" 
                                           VerticalOptions="Center" 
                                           Aspect="AspectFill" 
                                           x:Name="imageWave" 
                                           Source="outlet.gif"
                                           IsVisible="True"
                                           Margin="0"
                                           LoadingPlaceholder="imageWave1"
                                           Finish="ImageWave_Finish"
                                           DownloadStarted="ImageWave_DownloadStarted"
                                           />
    

    您是如何加载图像的?您可以共享代码吗?您可以使用
    fImageLoading
    。在实际图像加载之前,您可以使用任何图像。@JackHua MSFT我正在使用FFimageloading加载GIF,我有两个图像,一个是GIF,第二个是PNG,但当PNG加载时,GIF应该显示,当PNG加载成功时,GIF应该消失,PNG应该显示。@JackHua MSFT我正在使用FFimageloading加载GIF图像,我有两个图像,一个是GIF,另一个是PNG,但我希望在加载PNG时,直到那时GIF应该显示,当成功加载PNG时,GIF应该消失,PNG应该显示在上面。谢谢,这真的很有帮助,但如果你能告诉我关于它的后端代码,我应该在“ImageWave_DownloadStarted”中使用什么,这将更有帮助。查看我所做的,并纠正我的错误。@Manisha将stackFrontImage IsVisible=“True”更改为IsVisible=“false”。它正在抛出异常,即:异常:只有创建视图层次结构的原始线程才能触摸其viewsTry来更新主线程中的UI?这是第一个图像还是第二个图像将被加载?我不明白你的意思,尝试使用这个片段获取任何示例图像以了解插件的行为,稍后你可以根据你的要求进行修改。实际上我使用了这段代码,它工作正常,但问题是它在GIF后快速显示。所以你知道GIF应该放在第一位,并且需要一些时间,然后第二个图像应该在加载后显示。否则你的答案会很有帮助,但这并不是我想要的。我在这里提到的截图请检查。
     private void ImageWave_Finish(object sender, FFImageLoading.Forms.CachedImageEvents.FinishEventArgs e)
            {
                stackBehindImage.IsVisible = true;
            }
    
            private void ImageWave_DownloadStarted(object sender, FFImageLoading.Forms.CachedImageEvents.DownloadStartedEventArgs e)
            {
                stackBehindImage.IsVisible = false;
            }
    
    <ffimageloading:CachedImage HorizontalOptions="Center" 
                    VerticalOptions="Center"
                    WidthRequest="300" HeightRequest="300"
                    DownsampleToViewSize="true"
                    LoadingPlaceholder = "loading.png"
                    Source = "http://loremflickr.com/600/600/nature?filename=simple.jpg">
    </ffimageloading:CachedImage>
    
        <ffimageloadingsvg:SvgCachedImage  HeightRequest="100"
                                           HorizontalOptions="FillAndExpand" 
                                           VerticalOptions="Center" 
                                           Aspect="AspectFill" 
                                           x:Name="imageWave" 
                                           Source="outlet.gif"
                                           IsVisible="True"
                                           Margin="0"
                                           LoadingPlaceholder="imageWave1"
                                           Finish="ImageWave_Finish"
                                           DownloadStarted="ImageWave_DownloadStarted"
                                           />
    
    private void ImageWave_Finish(object sender, FFImageLoading.Forms.CachedImageEvents.FinishEventArgs e)
    {
        stackFrontImage.IsVisible = false;
    }
    
    private void ImageWave_DownloadStarted(object sender, FFImageLoading.Forms.CachedImageEvents.DownloadStartedEventArgs e)
    {
        stackFrontImage.IsVisible = true;
    }