it-swarm.com.de

Android Studio Canvas: Zeichnen einer zu großen Bitmap

Ich verwende Ubuntu 16.04. Wenn ich in Android Studio versuche, meine Anwendung im Emulator auszuführen, erhalte ich die folgende Fehlermeldung:

FATALE AUSNAHME: main Prozess: Projektname hier , PID: 2528 Java.lang.RuntimeException: Canvas: Versuch, eine zu große Bitmap (216090000Byte) zu zeichnen . at Android.view.DisplayListCanvas.throwIfCannotDraw (DisplayListCanvas.Java:260) unter Android.graphics.Canvas.drawBitmap (Canvas.Java:1415) unter Android.graphics.drawable.BitmapDrawable.draw (BitmapDrawable.Java:528) unter Android.widget.ImageView.onDraw (ImageView.Java:1316) unter Android.view.View.draw (View.Java:17185) at Android.view.View.updateDisplayListIfDirty (View.Java:16167) unter Android.view.View.draw (View.Java:16951) unter Android.view.ViewGroup.drawChild (ViewGroup.Java:3727) unter Android.view.ViewGroup.dispatchDraw (ViewGroup.Java:3513) at Android.view.View.updateDisplayListIfDirty (View.Java:16162) unter Android.view.View.draw (View.Java:16951) unter Android.view.ViewGroup.drawChild (ViewGroup.Java:3727) at Android.view.ViewGroup.dispatchDraw (ViewGroup.Java:3513) um
usw...

Ich musste einige Reifen durchlaufen, um meinen Emulator zum Laufen zu bringen. Allerdings musste ein Sym-Link erstellt werden, damit ich den Emulator unter AMD ausführen kann. Nicht sicher, ob dies ein Teil des Problems ist. Und für das Leben von mir kann ich nicht verstehen, warum das so weitergeht. In meiner Gruppe gibt es andere, die das Projekt auf demselben emulierten Telefon und SDK einwandfrei nachahmen.

39
Francisco

Verschieben Sie Ihr Bild in (hochauflösend) drawable to drawable-xxhdpi . Bei der App-Entwicklung müssen Sie jedoch kein großes Bild verwenden. Dadurch wird Ihre APK-Datei vergrößert.

103

Ich hatte das gleiche Problem ... Wenn Sie versuchen, ein Bild hochzuladen, das auf einigen Geräten mit niedriger Auflösung zu groß ist, wird die App kollabieren. Sie können mehrere Bilder in verschiedenen Größen (HDDPI, XXDPI usw.) erstellen Verwenden Sie einfach eine externe Bibliothek, um Bilder zu laden, die das Problem schnell und effizient lösen. Ich habe die Glide-Bibliothek verwendet (Sie können auch eine andere Bibliothek wie Picasso verwenden).

    panel_IMG_back = (ImageView) findViewById(R.id.panel_IMG_back);
    Glide
            .with(this)
            .load(MyViewUtils.getImage(R.drawable.wallpaper)
            .into(panel_IMG_back);
7
Guy4444

Es stellte sich heraus, dass das Problem das Hauptbild war, das wir zu unserer Zeit in unserer App verwendeten. Die tatsächliche Größe des Bildes war zu groß, also haben wir es komprimiert. Dann funktionierte es wie ein Zauber, kein Qualitätsverlust und die App lief gut auf dem Emulator.

4
Francisco

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)

Effizienteres Gleiten als Picasso beim Zeichnen auf große Bitmap

0
Deniz

Für diesen Fehler war, wie andere sagten, ein großes Bild (1800px X 900px), das sich in einem Zeichnungsverzeichnis befand. Ich habe das Bild bearbeitet und die Größe proportional mit Photoshop verkleinert, und es hat funktioniert ... !! 

In meinem Fall musste ich die Android-Plattform entfernen und erneut hinzufügen. Etwas blieb hängen und das Kopieren meines gesamten Codes in eine andere App funktionierte wie ein Zauber - daher meine Idee, den Build für Android aufzuräumen, indem die Plattform entfernt wurde.

cordova platform remove Android
cordova platform add Android

Ich denke, es ist eine Art Aufräumen, die Sie von Zeit zu Zeit tun müssen :-(

0
pieroxy

Dies ist ein Problem des Gleitens. Verwenden Sie diese Option, während Sie versuchen, zu vielen Bildern zu laden. Einige davon sind sehr viel größer: Glide.load("your image path") .transform( new MultiTransformation<>( new CenterCrop(), new RoundedCorners( holder.imgCompanyLogo.getResources() .getDimensionPixelSize(R.dimen._2sdp) ) ) ) .error(R.drawable.ic_nfs_default) .into(holder.imgCompanyLogo); } 

0
Deepak Rajput