我的问题可能不是Xamarin。表单相关,但可以扩展到Android。
我一直在我的xamarin.forms应用程序中使用PNG图标。我把每一个尺寸都放进可抽出的文件夹里。这很好用。
现在我使用FFImageLoading库切换了一些png和svg文件。它通常也可以正常工作,但是如果我没有给出确切的高度和宽度请求,当我在Grid或StackLayout中使用时,它似乎没有正确选择大小。

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto" />
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*" />
        <ColumnDefinition Width="*" />
    </Grid.ColumnDefinitions>

     <Frame Style="{StaticResource frmStyle}"  BackgroundColor="Transparent" Grid.Row="0" Grid.Column="0" >
        <StackLayout Orientation="Vertical"  >
            <ffimageloadingsvg:SvgCachedImage Source="resource://myApp.Images.Icons.rating.svg">

            </ffimageloadingsvg:SvgCachedImage>
        </StackLayout>
    </Frame>

    <Frame Style="{StaticResource frmStyle}" BackgroundColor="Transparent" Grid.Row="0" Grid.Column="1" >
        <StackLayout Orientation="Vertical" >
            <Image  Source="ic_feedback_white_48dp.png"  >

            </Image>
        </StackLayout>
    </Frame>
</Grid>

如果我不使用固定尺寸,上面的代码将作为第一个屏幕截图。左边的svg文件也很模糊。我认为SVG文件在缩放时不会变得模糊。rate.svg文件代码如下
android - 如何在Xamarin表单/Android中正确使用SVG图像?-LMLPHP
<?xml version="1.0" encoding="utf-8"?>
<svg xmlns="http://www.w3.org/2000/svg" height="24" width="24" viewBox="0 0 24 24">
  <g>
    <path id="path1" transform="rotate(0,12,12) translate(0,0) scale(0.75,0.75)  " fill="#FFFFFF" d="M16.001007,0L20.944,10.533997 32,12.223022 23.998993,20.421997 25.889008,32 16.001007,26.533997 6.1109924,32 8,20.421997 0,12.223022 11.057007,10.533997z" />
  </g>
</svg>

如果我使用如下72x72的固定尺寸,结果看起来很好。看右边的图标是PNG,它没有任何固定的高度和宽度。它看起来像是从可拉伸的正确尺寸中挑选出来的。
所以我的问题是
我们是否总是必须对svg文件使用固定宽度和高度?
如果是的话,在这些情况下,使用带有png文件的可绘制文件夹更有优势,因为它们可以动态工作。当然,我可以对svg文件进行条件大小调整,但这需要对不同的屏幕等进行更多的测试。如何根据屏幕大小动态调整svg文件?
android - 如何在Xamarin表单/Android中正确使用SVG图像?-LMLPHP

最佳答案

在使用svg文件时,必须指定视图大小(至少一个维度),否则它将退回到某个默认值(100左右)。
您也可以在不指定视图大小的情况下指定SVG大小,请参见SvgImageSource.FromFile方法及其width/height参数。
我认为我们可以修改库代码来读取SVG文件大小,而不是退回到一个恒定大小的值…但还没有实施。
如果是,在这些情况下,使用带有png文件的可绘制文件夹会有更多
优势在于它们可以动态工作。
你说得不对。可绘制文件夹中的图像文件将始终具有与原始文件分辨率相同的大小。

关于android - 如何在Xamarin表单/Android中正确使用SVG图像?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48158751/

10-12 00:38
查看更多