android - Xamarin.Forms Image gif 动画无法在 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\drawable
和AnimatedGifForms.iOS\Resources
。
尽管您确实提到它在 iOS 中对您有用。可能值得您花时间查看他的简单示例并将其与您正在做的事情进行比较。
在那张纸条上:
我尝试使用他的示例的修改版本来加载一个动画 gif,它是项目的 NetStandard 共享库中的 EmbeddedResource,但没有成功。我正在使用该ImageSource.FromStream( () => assembly.GetManifestResourceStream( resourcePath ) );
方法从绑定转换器中的流创建 ImageSource。我可以通过这种方式毫无问题地加载静态 gif 图像。我什至可以毫无问题地将动画图像加载为静态图像(该IsAnimationPlaying
属性必须在 xaml 中不存在),但是当我IsAnimationPlaying
在 xaml 中添加/设置该属性时,Android 应用程序崩溃并出现以下问题:
=================================================================
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),结果没有任何变化。
推荐阅读
- wpf - 如何创建一个继承自 Thumb 的自定义控件“MyThumb”,同时用户不能设置 MyThumb 的宽度和高度?
- java - Safepoint+stats 日志,输出 JDK12 中没有 vmop 操作
- csv - 如何在 Jasper 报告(CSV 导出与 HTML 布局)中省略分组功能(但将分组值作为列包含)?
- python - Python 文件树 + 大小和计数文件和目录的数量
- java - 如何向 JFrame 添加自定义组件?
- c++ - 如何从 cv::Mat 表示 QwT 中的颜色图数据?
- javascript - 需要在 Angular 7 中创建文件的翻书视图
- java - 排序数组列表中的问题
- oracle - 类似结果的 Oracle PARTITION BY 与 GROUP BY 的解释
- c - ncurses下如何可靠处理KEY_HOME和KEY_END