web-dev-qa-db-fra.com

Android Studio Canvas: dessiner un bitmap trop volumineux

Je suis sous Ubuntu 16.04. Et sur Android Studio lorsque j'essaie d'exécuter mon application dans l'émulateur, l'erreur suivante apparaît:

EXCEPTION FATALE: principale Processus: nom du projet ici , PID: 2528 Java.lang.RuntimeException: Canvas: tentative de dessiner un bitmap trop volumineux (216090000bytes) . sur Android.view.DisplayListCanvas.throwIfCannotDraw (DisplayListCanvas.Java:260) sur Android.graphics.Canvas.drawBitmap (Canvas.Java:1415) sur Android.graphics.drawable.BitmapDrawable.draw (BitmapDrawable.Java:528) sur Android.widget.ImageView.onDraw (ImageView.Java:1316) sur Android.view.View.draw (View.Java:17185) sur Android.view.View.updateDisplayListIfDirty (View.Java:16167) sur Android.view.View.draw (View.Java:16951) sur Android.view.ViewGroup.drawChild (ViewGroup.Java:3727) sur Android.view.ViewGroup.dispatchDraw (ViewGroup.Java:3513) sur Android.view.View.updateDisplayListIfDirty (View.Java:16162) sur Android.view.View.draw (View.Java:16951) sur Android.view.ViewGroup.drawChild (ViewGroup.Java:3727) sur Android.view.ViewGroup.dispatchDraw (ViewGroup.Java:3513) sur
etc...

Pour que mon émulateur fonctionne, il m'a fallu passer par quelques étapes, mais je devais créer un lien symbolique pour pouvoir exécuter l'émulateur sur AMD. Je ne sais pas si cela fait partie du problème. Et pour ma vie, je ne peux pas comprendre pourquoi il continue à le faire. Dans mon groupe, il y en a d'autres qui imitent le projet parfaitement sur le même téléphone et SDK émulés.

39
Francisco

Déplacez votre image dans le dossier (hi-res) drawable to drawable-xxhdpi . Mais dans le développement d'applications, vous n'avez pas besoin d'utiliser une grande image. Cela augmentera la taille de votre fichier APK.

103
Md Imran Choudhury

J'ai eu le même problème… .. Si vous essayez de télécharger une image trop grande sur certains appareils basse résolution, l'application va s'effondrer… .. Vous pouvez créer plusieurs images de différentes tailles (hdpi, xxdpi, etc.) ou utilisez simplement une bibliothèque externe pour charger des images qui résolvent le problème rapidement et efficacement ..__ J'ai utilisé la bibliothèque Glide (vous pouvez utiliser une autre bibliothèque comme Picasso).

    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

Il s’est avéré que le problème était l’image principale que nous avions utilisée sur notre application à l’époque. La taille réelle de l'image étant trop grande, nous l'avons compressée. Ensuite, cela a fonctionné comme un charme, aucune perte de qualité et l'application a fonctionné correctement sur l'émulateur.

4
Francisco

Car cette erreur était comme les autres disent une grande image (1800px X 900px) qui était dans le répertoire dessinable, j'ai édité l'image et réduit la taille proportionnellement en utilisant Photoshop et ça a fonctionné ... !! 

Dans mon cas, j'ai dû supprimer la plate-forme Android et l'ajouter à nouveau. Quelque chose s'est bloqué et copier tout mon code dans une autre application a fonctionné à merveille - d'où mon idée de nettoyer la construction pour Android en supprimant la plate-forme.

cordova platform remove Android
cordova platform add Android

Je suppose que c'est une sorte de nettoyage que vous devez faire de temps en temps :-(

0
pieroxy

Ceci est un problème de glisse alors utilisez-le pendant que vous essayez de charger plusieurs images et certaines sont très grandes: 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