首页 > 解决方案 > ffimageloading.cross.MvxCachedImageView 从 Android 上的资源加载 svg

问题描述

我正在尝试使用以下 axml 加载我的资源中的 svg(设置为 Embeddded Resource VS2019):

<ffimageloading.cross.MvxCachedImageView
    android:layout_width="36dp"
    android:layout_height="36dp"
    local:MvxBind="ImagePath res:svg.passenger" />

但什么也没显示。它占用 36x36 空间,但无法加载 svg

在调试输出中它显示:

2019-09-12 13:38:13 [错误] (MvxBind) 视图绑定 MvxException 期间引发的异常:意外字符:在 targetProperty 文本 res:svg.passenger 中的位置 3 MvvmCross.Binding.Parse.PropertyPath.MvxPropertyPathParser.ParseNextToken () [0x00036] 在 C:\projects\mvvmcross\MvvmCross\Binding\Parse\PropertyPath\MvxPropertyPathParser.cs:70 在 MvvmCross.Binding.Parse.PropertyPath.MvxPropertyPathParser.Parse (System.String textToParse) [0x00009] 在 C: \projects\mvvmcross\MvvmCross\Binding\Parse\PropertyPath\MvxPropertyPathParser.cs:39 09-12 13:38:13.606 I/mono-stdout(18939): 2019-09-12 13:38:13 [错误] (MvxBind ) 视图绑定期间抛出异常 MvxException: Unexpected character : at position 3 in targetProperty text res:svg.passenger

我也试过:

<ffimageloading.cross.MvxCachedImageView
    android:layout_width="36dp"
    android:layout_height="36dp"
    local:MvxBind="ImagePath res://svg.passenger" />

<ffimageloading.cross.MvxCachedImageView
    android:layout_width="36dp"
    android:layout_height="36dp"
    ImagePath="res:svg.passenger" />

<ffimageloading.cross.MvxCachedImageView
    android:layout_width="36dp"
    android:layout_height="36dp"
    ImagePath="res://svg.passenger" />

我很确定 svg 没有损坏,因为如果我使用 XamSvg 它会显示得很好

<XamSvg.SvgImageView
    local:svg="res:svg.passenger"
    local:colorMapping="4C7BC1=AAAAAA"
    android:layout_width="36dp"
    android:layout_height="36dp" />

更新:

<ffimageloading.cross.MvxCachedImageView
       android:gravity="right"
       android:layout_width="36dp"
       android:layout_height="36dp"
       local:MvxBind="ImagePath 'res:passenger.svg'" />

现在导致不同的异常:

09-12 14:42:56.806 D/skia (23916): --- 无法创建带有消息“未实现”的图像解码器图像加载失败:passenger.svg System.BadImageFormatException:FFImageLoading.PlatformImageLoaderTask 1[TImageView].GenerateImageFromDecoderContainerAsync (FFImageLoading.IDecodedImage1 [TNativeImageContainer ] 解码,FFImageLoading.Work.ImageInformation imageInformation, System.Boolean isPlaceholder) [0x000ba] 在 C:\projects\ffimageloading\source\FFImageLoading.Droid\Work\PlatformImageLoadingTask.cs:221 09-12 14:42:56.810 D/skia (23916):---无法使用消息“未实现”创建图像解码器 09-12 14:42:56.849 I/mono-stdout(23916):图像加载失败:passenger.svg 09-12 14:42:56.850 I /mono-stdout(23916): System.BadImageFormatException: FFImageLoading.Work.ImageLoaderTask 中的位图无效3[TDecoderContainer,TImageContainer,TImageView].GenerateImageAsync (System.String path, FFImageLoading.Work.ImageSource source, System.IO.Stream imageData, FFImageLoading.Work.ImageInformation imageInformation, System.Boolean enableTransformations, System.Boolean isPlaceholder) [0x002e2] in C:\projects\ffimageloading\source\FFImageLoading.Common\Work\ImageLoaderTask.cs:360 at FFImageLoading.Work.ImageLoaderTask3[TDecoderContainer,TImageContainer,TImageView].RunAsync()[0x0047c]在C:\projects\ffimageloading\source\FFImageLoading.Common\Work\ImageLoaderTask.cs:643

标签: xamarin.androidffimageloading

解决方案


啊...好吧..这很尴尬:

FFImageLoading.Cross.MvxCachedImageView

不是您正在寻找的视图

FFImageLoading.Cross.MvxSvgCachedImageView

虽然有效:)

对于其他寻找真实示例的人来说,如下所示:

<FFImageLoading.Cross.MvxSvgCachedImageView
    android:id="@+id/iconJob"
    android:layout_width="100dp"
    android:layout_height="100dp"
    android:layout_marginBottom="10dp"
    local:MvxBind="Click NavigateJobCommand; ImagePath 'resource://Throwaway1.ResourceLibraryWithAllSvgs.svg.taxi.svg?assembly=Throwaway1.ResourceLibraryWithAllSvgs'" />

推荐阅读