繁体   English   中英

Xamarin.Forms 图像 gif animation 无法在 ZC31B32364CE19CA58FCD150A66Z7 上播放

[英]Xamarin.Forms Image gif animation doesn't play on android

我是 Xamarin 的新手,我尝试在图像控件中播放 Gif。 在我的 iOS 模拟器中,它运行良好,但是当我在 Android 模拟器中启动应用程序时,gif 无法播放。 我不使用旧版渲染器,但我从未指定使用快速渲染器(但我认为不必如此)。 那是我的 XAML 文件:

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="Connect.Views.SplashPage">
<ContentPage.Content>
    <StackLayout Margin="20,35,20,20">
        <Image Source="splashAni.gif" VerticalOptions="CenterAndExpand"
               HorizontalOptions="Center" IsAnimationPlaying="True"/>
    </StackLayout>
</ContentPage.Content>

不知道怎么回事,希望能帮帮我,先谢谢了!

这里的游戏有点晚了,但这是Gerald Versluis 的一个工作示例,我可以用它来测试一些场景。 这是一个链接到 GitHub 上的源代码的基本示例。

我怀疑您的资源可能未包含在 Android 项目中,并且无法找到该文件。 在 Gerald 的示例中,他的动画 gif 分别位于AnimatedGifForms.Android\Resources\drawableAnimatedGifForms.iOS\Resources中。

尽管您确实提到它在 iOS 中对您有用。 可能值得您花时间查看他的简单示例并将其与您正在做的事情进行比较。

在那张纸条上:

我尝试使用他的示例的修改版本来加载一个动画 gif,它是项目的 NetStandard 共享库中的 EmbeddedResource,但没有成功。 我正在使用ImageSource.FromStream( () => assembly.GetManifestResourceStream( resourcePath ) ); 在绑定转换器中从 stream 创建 ImageSource 的方法。 我可以通过这种方式毫无问题地加载 static gif 图像。 我什至可以毫无问题地加载动画图像,作为 static 图像(xaml 中必须不存在IsAnimationPlaying属性),但是当我在 xaml 中添加/设置IsAnimationPlaying属性时,ZE84E30B9390CDB66DZDB6DBC 崩溃:

=================================================================
    Native Crash Reporting
=================================================================
Got a SEGV while executing native code. This usually indicates
a fatal error in the mono runtime or one of the native libraries 
used by your application.
=================================================================

No native Android stacktrace (see debuggerd output).

=================================================================
    Basic Fault Address Reporting
=================================================================
Memory around native instruction pointer (0x8c83a896):
0x8c83a886  10 8d 4d e4 8b 4d 10 89 4d e4 8d 4d e4 8b 4d e4  ..M..M..M..M..M.
0x8c83a896  89 4c 24 08 89 44 24 04 89 3c 24 8b c0 e8 c0 fe  .L$..D$..<$.....
0x8c83a8a6  ff ff 89 45 c4 8b 4d f0 8d 64 24 00 90 90 90 8b  ...E..M..d$.....
0x8c83a8b6  45 c4 e9 77 00 00 00 8b 4d f0 8d 64 24 00 90 90  E..w....M..d$...

=================================================================
    Managed Stacktrace:
=================================================================
      at Xamarin.Forms.Platform.Android.FormsAnimationDrawable:LoadImageAnimationAsync <0x0012e>
      at Xamarin.Forms.Platform.Android.FormsAnimationDrawable:LoadImageAnimationAsync <0x0013f>
      at Xamarin.Forms.Platform.Android.FormsAnimationDrawable:LoadImageAnimationAsync <0x0013f>
      at Xamarin.Forms.Platform.Android.FormsAnimationDrawable:LoadImageAnimationAsync <0x0013f>
      at Xamarin.Forms.Platform.Android.FormsAnimationDrawable:LoadImageAnimationAsync <0x0013f>
      at Xamarin.Forms.Platform.Android.FormsAnimationDrawable:LoadImageAnimationAsync <0x0
.....
      at Xamarin.Forms.Platform.Android.FormsAnimationDrawable:LoadImageAnimationAsync <0x0013f>
      at Xamarin.Forms.Platform.Android.FormsAnimationDrawable:LoadImageAnimationAsync <0x0013f>
      at Xamarin.Forms.Platform
.Android.FormsAnimationDrawable:LoadImageAnimationAsync <0x0013f>
      at Xamarin.Forms.Platform.Android.StreamImagesourceHandler:LoadImageAnimationAsync <0x0005b>
      at <UpdateBitmap>d__2:MoveNext <0x00768>
      at System.Runtime.CompilerServices.AsyncTaskMethodBuilder:Start <0x00127>
      at Xamarin.Forms.Platform.Android.ImageViewExtensions:UpdateBitmap <0x001bf>
      at Xamarin.Forms.Platform.Android.ImageViewExtensions:UpdateBitmap <0x00067>
      at <TryUpdateBitmap>d__6:MoveNext <0x0028f>
      at System.Runtime.CompilerServices.AsyncTaskMethodBuilder:Start <0x00147>
      at Xamarin.Forms.Platform.Android.FastRenderers.ImageElementManager:TryUpdateBitmap <0x0019b>
      at <OnElementChanged>d__3:MoveNext <0x004b7>
      at System.Runtime.CompilerServices.AsyncVoidMethodBuilder:Start <0x00127>
      at Xamarin.Forms.Platform.Android.FastRenderers.ImageElementManager:OnElementChanged <0x0015f>
      at System.EventHandler`1:invoke_void_object_TEventArgs <0x00143>
      at Xamarin.Forms.Platform.Android.FastRenderers.ImageRenderer:OnEl
ementChanged <0x0011b>
      at Xamarin.Forms.Platform.Android.FastRenderers.ImageRenderer:Xamarin.Forms.Platform.Android.IVisualElementRenderer.SetElement <0x005d7>
      at Xamarin.Forms.Platform.Android.Platform:CreateRenderer <0x0013f>
      at Xamarin.Forms.Platform.Android.VisualElementPackager:AddChild <0x00487>
      at Xamarin.Forms.Platform.Android.VisualElementPackager:SetElement <0x00837>
      at Xamarin.Forms.Platform.Android.VisualElementPackager:Load <0x00057>
      at Xamarin.Forms.Platform.Android.VisualElementRenderer`1:SetPackager <0x00077>
      at Xamarin.Forms.Platform.Android.VisualElementRenderer`1:SetElement <0x007b7>
      at Xamarin.Forms.Platform.Android.VisualElementRenderer`1:Xamarin.Forms.Platform.Android.IVisualElementRenderer.SetElement <0x00187>
      at Xamarin.Forms.Platform.Android.Platform:CreateRenderer <0x0013f>
      at Xamarin.Forms.Platform.Android.VisualElementPackager:AddChild <0x00487>
      at Xamarin.Forms.Platform.Android.VisualElementPackager:SetElement <0x00837>
      at Xamarin.Forms.Platform
.Android.VisualElementPackager:Load <0x00057>
      at Xamarin.Forms.Platform.Android.VisualElementRenderer`1:SetPackager <0x00077>
      at Xamarin.Forms.Platform.Android.VisualElementRenderer`1:SetElement <0x007b7>
      at Xamarin.Forms.Platform.Android.VisualElementRenderer`1:Xamarin.Forms.Platform.Android.IVisualElementRenderer.SetElement <0x00187>
      at Xamarin.Forms.Platform.Android.Platform:CreateRenderer <0x0013f>
      at Xamarin.Forms.Platform.Android.AppCompat.Platform:AddChild <0x000b3>
      at Xamarin.Forms.Platform.Android.AppCompat.Platform:SetPageInternal <0x00297>
      at Xamarin.Forms.Platform.Android.AppCompat.Platform:SetPage <0x0067f>
      at Xamarin.Forms.Platform.Android.FormsAppCompatActivity:InternalSetPage <0x001b7>
      at Xamarin.Forms.Platform.Android.FormsAppCompatActivity:SetMainPage <0x00077>
      at Xamarin.Forms.Platform.Android.FormsAppCompatActivity:LoadApplication <0x0067b>
      at AnimatedGifForms.Droid.MainActivity:OnCreate <0x00143>
      at Android.App.Activity:n_OnCreate_Landroid_os_Bundle_ <0
x000ab>
      at Android.Runtime.DynamicMethodNameCounter:8 <0x000c3>
      at Android.Runtime.DynamicMethodNameCounter:8 <0x000b3>
=================================================================
[HotReload] (2020-05-29 10:24:00.4): ERROR: Caught exception in AgentStatusChangedHandler at 212: Xamarin.HotReload.DebuggerTimeoutException: Failed to Inject Assembly
   at Microsoft.VisualStudio.Telemetry.WindowsErrorReporting.WatsonReport.GetClrWatsonExceptionInfo(Exception exceptionObject)
   at Microsoft.VisualStudio.Telemetry.WindowsErrorReporting.WatsonReport.GetClrWatsonExceptionInfo(Exception exceptionObject)

页面继续令人作呕,然后它就死了。 我已经升级到最新版本的 Xamarin.Forms (4.6.0.772) 和 Essentials (1.5.3.2),结果没有变化。

我花了一整天的时间在这上面。 据我所知,大多数 gif 实际上在 Xamarin Forms 中不起作用。 当它们没有首先崩溃时,它们仅显示为单帧 static 图像。 即使它确实有效(这似乎只在非常简单的应用程序中,例如示例应用程序) ,加载图像也需要 5 秒以上。

该功能已完全损坏,应避免使用。

替代方案是...

将 yo gif's转换为mp4并使用XCT中的MediaElementhttps://github.com/xamarin/XamarinCommunityToolkit

像这样:

<xct:MediaElement WidthRequest="310"
                              HeightRequest="345"
                              BackgroundColor="Transparent"
                              AutoPlay="True"
                              ShowsPlaybackControls="False"
                              HorizontalOptions="Center"
                              IsLooping="True"
                              Source="ms-appx:///house.mp4" />

在此处阅读有关Source的更多信息: https://docs.microsoft.com/en-us/xamarin/community-toolkit/views/mediaelement#play-media-embedded-in-the-app-package

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM