Android为什么将下载的图像与嵌入式图像区别对待

问题描述 投票:0回答:1

我有3张图片。它们都是圆形的(实际上是具有透明背景的正方形),并且都是3个大小完全相同的。

我希望以下xaml可以生成3个相似的图像,由于AspectFill的缘故,它们都拉伸到容器的最大值,并保持其长宽比。

这对UWP很好,但是在Android上,只有拳头图像似乎想听我的计划。我可以发现的唯一区别是,第一个映像是嵌入式资源,其他映像已下载。 (它们不是直接从url中显示,而是先存储在本地)

如果我仅显示下载的图像,它们都将显示为“小”。如果我仅显示嵌入式图像,则它们全部显示为“大”。

在我看来,在应用Aspect时,Android对下载的图像的处理方式不同于嵌入式图像,但我不知道为什么。

    <ScrollView Orientation="Horizontal" HorizontalOptions="FillAndExpand">
        <Grid>
            <StackLayout x:Name="NarrationsStackLayout" BindableLayout.ItemsSource="{Binding Narrations}" Orientation="Horizontal" HorizontalOptions="CenterAndExpand" VerticalOptions="Fill">
                <BindableLayout.ItemTemplate>
                    <DataTemplate>
                        <Image Source="{Binding NarrationImage}" Aspect="AspectFill" HorizontalOptions="CenterAndExpand" VerticalOptions="CenterAndExpand" BackgroundColor="Green"  >
                            <Image.GestureRecognizers>
                                <TapGestureRecognizer Command="{Binding TapCommand}" />
                            </Image.GestureRecognizers>
                        </Image>
                    </DataTemplate>
                </BindableLayout.ItemTemplate>
            </StackLayout>
        </Grid>
    </ScrollView>

什么可能导致这种行为?

enter image description here

xaml xamarin datatemplate aspect-fit
1个回答
0
投票

根据朱欧(Leo Zhu)的建议,我有一个有效的解决方法来解决我的问题,但我对原因深感困惑。

<StackLayout x:Name="NarrationsStackLayout" BindableLayout.ItemsSource="{Binding Narrations}" Orientation="Horizontal" HorizontalOptions="CenterAndExpand" VerticalOptions="Fill" Margin="0" Padding="0">
                    <BindableLayout.ItemTemplate>
                        <DataTemplate>
                            <Image Source="{Binding NarrationImage}" Aspect="AspectFill" HorizontalOptions="CenterAndExpand" VerticalOptions="CenterAndExpand" BackgroundColor="Green" 
                                   HeightRequest="{Binding Source={RelativeSource Mode=FindAncestor, AncestorType={x:Type StackLayout }}, Path=Height}"  
                                   WidthRequest="{Binding Source={RelativeSource Mode=FindAncestor, AncestorType={x:Type StackLayout }}, Path=Height}">
                                <Image.GestureRecognizers>
                                    <TapGestureRecognizer Command="{Binding TapCommand}" />
                                </Image.GestureRecognizers>
                            </Image>
                        </DataTemplate>
                    </BindableLayout.ItemTemplate>
                </StackLayout>
© www.soinside.com 2019 - 2024. All rights reserved.