为什么 Android 对待下载图像的方式与对待嵌入图像的方式不同
Why does Android treat downloaded images differently than embedded images
我有 3 张图片。它们都是圆形的(实际上是带有透明背景的正方形)并且都是 3 个完全相同的大小。
我希望以下 xaml 生成 3 个外观相似的图像,由于 AspectFill,所有图像都拉伸到容器的最大值以保持其纵横比。
这对 UWP 很好用,但在 Android 上似乎只有第一张图片想听听我的计划。我能找到的唯一区别是第一个图像是嵌入资源,其他图像是下载的。 (它们不是直接从url显示出来的,而是先存储在本地)
如果我只显示下载的图片,它们都会显示 'small'。
如果我只显示嵌入图像,它们都会显示 'big'.
在我看来,Android 在应用 Aspect 时对待下载图像的方式与对待嵌入图像的方式不同,但我不明白为什么。
<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>
是什么导致了这种行为?
在 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>
我有 3 张图片。它们都是圆形的(实际上是带有透明背景的正方形)并且都是 3 个完全相同的大小。
我希望以下 xaml 生成 3 个外观相似的图像,由于 AspectFill,所有图像都拉伸到容器的最大值以保持其纵横比。
这对 UWP 很好用,但在 Android 上似乎只有第一张图片想听听我的计划。我能找到的唯一区别是第一个图像是嵌入资源,其他图像是下载的。 (它们不是直接从url显示出来的,而是先存储在本地)
如果我只显示下载的图片,它们都会显示 'small'。 如果我只显示嵌入图像,它们都会显示 'big'.
在我看来,Android 在应用 Aspect 时对待下载图像的方式与对待嵌入图像的方式不同,但我不明白为什么。
<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>
是什么导致了这种行为?
在 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>