在页面内显示画廊中的多张图片会引发异常。在一页上显示一张分辨率(例如3264x2488)的照片即可。但是,当要显示多个高分辨率时,它将在Android上崩溃。分辨率越高,页面上显示的内容越少。
https://github.com/Crunch91/RezepteTagebuch/blob/master/RezepteTagebuch/RezepteTagebuch/Views/RecipeView.xaml
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="RezepteTagebuch.Views.RecipeView">
<...>
<StackLayout HorizontalOptions="Fill" Orientation="Horizontal">
<Image Source="{Binding FoodPicture}"/>
<Image Source="{Binding DescriptionPicture}"/>
</StackLayout>
</...>
我可以在ListView中看到相同的行为。 ListView中的一张照片效果很好。添加完另一张照片后,它又崩溃了。
https://github.com/Crunch91/RezepteTagebuch/blob/master/RezepteTagebuch/RezepteTagebuch/Views/AllRecipeView.xaml
<StackLayout>
<ListView ItemsSource="{Binding Recipes}" x:Name="recipeList">
<...>
<ViewCell>
<StackLayout HorizontalOptions="StartAndExpand" Orientation="Horizontal">
<Image WidthRequest="44" HeightRequest="44" Source="{Binding FoodPicturePath}" />
</StackLayout>
</ViewCell>
</...>
</ListView>
</StackLayout>
这是我的存储库,您可以在其中找到正在运行的Xamarin Forms应用程序:
https://github.com/Crunch91/RezepteTagebuch
我正在使用Android 4.3的Samsung Galaxy S3进行调试
如果有人可以帮助,我将不胜感激。
更新:
@idoT是正确的。我收到“ OutOfMemoryException”。
在显示图像之前调整图像大小的最佳方法是什么?
最佳答案
关于Android开发人员的一篇很棒的文章如何load large bitmaps efficiently:
public static Bitmap decodeSampledBitmapFromResource(Resources res, int resId,
int reqWidth, int reqHeight) {
// First decode with inJustDecodeBounds=true to check dimensions
final BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeResource(res, resId, options);
// Calculate inSampleSize
options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);
// Decode bitmap with inSampleSize set
options.inJustDecodeBounds = false;
return BitmapFactory.decodeResource(res, resId, options);
}
理想情况下,您将释放屏幕上未显示的所有图片的内存,以释放资源。