Я разрабатываю программное обеспечение для манги, используя .net maui, моя основная платформа — Android. Вот мой код.
<ListView
x:Name = "listView"
HasUnevenRows = "True"
IsPullToRefreshEnabled = "False"
ItemsSource = "{Binding ImageUrls}"
SelectionMode = "None"
SeparatorVisibility = "None">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<Grid>
<Image x:Name = "img" Source = "{Binding}" />
<Label
FontFamily = ""
HeightRequest = "600"
HorizontalOptions = "Center"
HorizontalTextAlignment = "Center"
IsVisible = "{Binding IsLoading, Source = {x:Reference img}}"
Text = "loding..."
TextColor = "Black"
VerticalTextAlignment = "Center" />
</Grid>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
Вот проблема при загрузке изображений. Когда загруженные изображения слишком велики, они выдают исключение Java.Lang.RuntimeException: «Холст: попытка нарисовать слишком большое (109224768 байт) растровое изображение». и развалится. Это было исправлено путем отключения или отключения аппаратного ускорения приложения для адаптации к различной плотности экрана, но это снизило плавность пролистывания, что, похоже, требует определенных затрат, и мне интересно, есть ли лучший способ.
<application android:hardwareAccelerated = "false" android:largeHeap = "true" ... />
<supports-screens android:anyDensity = "false" />
(Только сейчас я обнаружил, что проблема не имеет ничего общего с элементом управления изображением. Скорее, она генерируется под двойным влиянием конкретного изображения и прокручиваемого представления (например, ScrollView, ListView, CollectionView). Например, это изображение https://s1.baozicdn.com/scomic/woduzishengji-duburedicestudio/0/1-7ymq/24.jpg
имеет проблема
И другие картинки, такие как https://s1.baozicdn.com/scomic/woduzishengji-duburedicestudio/0/1-7ymq/25.jpg
, не проблема,Если вы добавите Margin="0,0,0,200" к изображению или если изображение будет помещено не в ListView, а в StackLayout, исключение не появится)
Буду признателен, если кто-нибудь захочет помочь
Я просмотрел много информации, но не нашел хорошего решения
Как предложил Джейсон, пожалуйста, помогите уточнить, насколько велики изображения. Также, пожалуйста, помогите создать Минимальный воспроизводимый пример и добавьте его в свой пост.
Эти картинки взяты из Интернета, они разного размера, я не знаю их конкретного размера, возможно, это видно по выброшенному исключению (109224768 байт) растрового изображения. Я всего лишь новичок, не знаю, это возможно
@chene Пожалуйста, попробуйте добавить свойство android:anyDensity в манифест, реферальную ссылку
К счастью, это устраняет сбой, но также вызывает некоторые другие проблемы, например, с отключением аппаратного ускорения, я посмотрю, есть ли лучший способ сделать это. Большое спасибо.
@chene Не беспокойтесь, я опубликую это как ответ, так как это поможет другим, столкнувшимся с той же проблемой!
Хорошо, спасибо за вашу идею по этому вопросу
Вы можете попробовать добавить свойство android:anyDensity
в файл AndroidManifest.xml
, как показано ниже:
<manifest ... >
<supports-screens
android:anyDensity = "false"
android:xlargeScreens = "true"
android:largeScreens = "true"
android:normalScreens = "true"
android:smallScreens = "true" />
</manifest>
В настоящее время я использую FFImageLoading.MAUI для решения этой проблемы. Мне не нужно отключать аппаратное ускорение или отключать плотность изображения, благодаря чему картинка прокручивается без эффекта зависания.
Он также предоставляет заполнители для загрузки и заполнители для ошибок, что, кстати, решает для меня еще одну проблему: использование метки и атрибута isloading изображения в качестве заполнителя при загрузке, и метка иногда исчезает, когда изображение не отображается.
Я думаю, что в наши дни его очень полезно использовать, и я надеюсь, что это поможет людям, столкнувшимся с той же проблемой.
Пожалуйста, прочитайте Как задать вопрос перед публикацией. Вы получите лучшие ответы, если отредактируете свой вопрос, сосредоточив внимание на одной конкретной проблеме, а не на нескольких. И было бы полезно точно знать, насколько велики эти изображения.