wake-up-neo.com

"Canvas: Versuch, zu große Bitmap zu zeichnen", wenn die Anzeigegröße für Android N größer als "Small" ist

Ich habe eine veröffentlichte App, die beim Start auf Android N abstürzt, wenn die neu eingeführte Display size OS-Einstellung auf einen zu großen Wert eingestellt ist.

Wenn ich in logcat schaue, sehe ich die folgende Meldung:

Java.lang.RuntimeException: Canvas: trying to draw too large(106,975,232 bytes) bitmap.

Ich habe das Problem in meiner ersten Aktivität mit einer ImageView verfolgt, die ein großes Hintergrundbild von Nice zeigt. Das fragliche Bild ist 2048x1066 und befindet sich in meinem generischen drawables-Verzeichnis. Daher wird dieses Bild unabhängig von der Dichte verwendet.

Alles funktioniert in Ordnung, wenn die Einstellung Display sizeSmall ist. Aber wenn ich zu Default gehe, funktioniert es nicht mehr. Wenn ich dann das Bild mit einem kleineren austausche, funktioniert es bei Default, aber wenn ich zu Large gehe, funktioniert es nicht mehr.

Meine Vermutung ist, dass das Anpassen von Display size bewirkt, dass sich Ihr Gerät wie ein physisch kleineres Gerät mit einer höheren Pixeldichte verhält. Aber ich verstehe nicht, was ich hier machen soll. Wenn ich progressiv kleinere Bilder für progressiv höhere Auflösungen einlege, sieht das auf großen Displays nicht gut aus. Oder verstehe ich etwas nicht?

Alle Hinweise wären sehr dankbar.

47
Brian Rak

In meinem Fall verschiebe ich die (hochauflösende) Splash-Bitmap von drawable nach drawable-xxhdpi, um die Lösung zu finden.

Ich hatte das gleiche Problem. Ich hatte nicht den Verdacht, dass mein Startbildschirm das Problem ist, da ist angezeigt wird, wenn die App gestartet wird, aber es stellte sich heraus, dass der Startbildschirm das Problem ist.

Der Begrüßungsbildschirm in meinem Fall hat eine xxhdpi-Auflösung und wurde versehentlich im Ordner drawable anstelle von drawable-xxhdpi abgelegt. Dies führte dazu, dass Android davon ausging, dass der Begrüßungsbildschirm eine mdpi-Auflösung hatte und das Bild auf das 3 × 3-fache seiner erforderlichen Größe skalierte und versuchte, eine Bitmap zu erstellen.

105
Johan Franzén

Verschieben Sie Ihr Bild in das Zeichenformat nach Mipmap-xxhdpi. Ihr Bild ist im Bitmap-Format. Sie sollten Ihr Bild also im Mipmap-Ordner ablegen. Dann funktioniert es

9

Ich weiß nicht, ob es jemandem helfen würde, aber ich lass es einfach hier ... In meinem Fall war das Problem nur auf Sumsung-Geräten mit Android 7 und das Problem war im Splash-Bildschirm. Nachdem Sie die Höhe auf 1024 px geändert haben, funktioniert alles einwandfrei 

9
kazimad

Versuchen Sie, die Bitmap.Factory-Klasse zu verwenden. Dieser Link hilft Ihnen dabei Große Bitmaps effizient laden

3
Khalid Ali

In meinem Fall habe ich das Problem gelöst, nachdem ich Android:hardwareAccelerated="false" in die applicationg der Manifestdatei eingefügt habe.

1
CHAMCHOUN

In meinem Fall habe ich einfach die Zeichenfläche des Bildes, das im Hintergrund verwendet wird, mit Paint3d geändert (oder Sie können eine andere verwenden). Hier teile ich einen Screenshot nur durchlaufen.

0
Vishaljoshi007

wenn Sie Picasso verwenden, wechseln Sie zu Glide.

Picasso entfernen

Picasso.get().load(Uri.parse("url")).into(imageView)

Glide ändern

Glide.with(context).load("url").into(imageView)

Effizienter

0
Deniz

Die Symboldateien sind zu groß für Android, um effizient und reibungslos geladen zu werden. Android erkennt dies mit seinen intelligenten Algorithmen.

Sie können die Symboldateien mit Final Android Resizer by asystat skalieren. Verändere sie in "xhdpi" oder niedriger.

Platzieren Sie die verkleinerten Fotos in einer Zeichnung oder überschreiben Sie die vorhandenen großen Symboldateien.

Dann bist du fertig.

0
lloydyu24

wenn Sie Glide verwenden und 1k Bilder gleichzeitig laden oder Bilder laden, ist dies ein Problem des Gleitens oder was auch immer Sie zur Einstellung der Bildansicht verwenden. Sie können es einfach lösen, indem Sie den Skalentyp in gleiten anwenden.

0
Deepak Rajput