2017-07-18 4 views
0

J'ai absolument expérience dans la conception de l'application Android. Un de mes amis m'a demandé d'essayer de créer une fonctionnalité pour leur application et c'est ce que j'essayais de faire depuis une semaine. Les deux premières choses que je dois faire sont d'ajouter une image d'arrière-plan (terminé) ajouter du texte (fait) et ajouter un bouton qui fait apparaître un menu (problème). Sans ajouter dans le bouton, je peux exécuter l'application dans l'émulateur intégré d'Android Studio, mais à l'instant où j'ajoute le bouton/imageButton, l'application se bloque. À ce stade, je n'essaie même pas d'obtenir le bouton pour faire apparaître le menu, c'est pour un autre jour. Tout ce que j'essaye de faire est d'obtenir le bouton pour ne pas planter l'application. J'ai regardé partout sur Internet à des tutoriels, de la documentation et même ici sur le débordement de la pile, mais je ne suis pas capable de trouver quelque chose.App Crashing lors de l'ajout d'un bouton- Android

En ce moment je n'ai même pas commencé à travailler avec le code Java, je ne travaille qu'avec du code XML (voir ci-dessous). Je vais poster le message d'erreur (celui de la fonction de moniteur Android) et je posterai une image de ce que mon appareil ressemble dans le studio et le message qui apparaît sur l'émulateur. Si quelqu'un pouvait m'aider, je l'apprécierais vraiment.

07-17 21:38:05.700 4273-4273/com.example.android.postvu E/AndroidRuntime: FATAL EXCEPTION: main 
                     Process: com.example.android.postvu, PID: 4273 
                     java.lang.RuntimeException: Canvas: trying to draw too large(110250000bytes) bitmap. 
                      at android.view.DisplayListCanvas.throwIfCannotDraw(DisplayListCanvas.java:260) 
                      at android.graphics.Canvas.drawBitmap(Canvas.java:1415) 
                      at android.graphics.drawable.BitmapDrawable.draw(BitmapDrawable.java:545) 
                      at android.view.View.getDrawableRenderNode(View.java:17314) 
                      at android.view.View.drawBackground(View.java:17250) 
                      at android.view.View.draw(View.java:17062) 
                      at android.view.View.updateDisplayListIfDirty(View.java:16053) 
                      at android.view.View.draw(View.java:16837) 
                      at android.view.ViewGroup.drawChild(ViewGroup.java:3764) 
                      at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3550) 
                      at android.view.View.updateDisplayListIfDirty(View.java:16048) 
                      at android.view.View.draw(View.java:16837) 
                      at android.view.ViewGroup.drawChild(ViewGroup.java:3764) 
                      at android.support.design.widget.CoordinatorLayout.drawChild(CoordinatorLayout.java:1228) 
                      at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3550) 
                      at android.view.View.updateDisplayListIfDirty(View.java:16048) 
                      at android.view.View.draw(View.java:16837) 
                      at android.view.ViewGroup.drawChild(ViewGroup.java:3764) 
                      at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3550) 
                      at android.view.View.updateDisplayListIfDirty(View.java:16048) 
                      at android.view.View.draw(View.java:16837) 
                      at android.view.ViewGroup.drawChild(ViewGroup.java:3764) 
                      at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3550) 
                      at android.view.View.updateDisplayListIfDirty(View.java:16048) 
                      at android.view.View.draw(View.java:16837) 
                      at android.view.ViewGroup.drawChild(ViewGroup.java:3764) 
                      at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3550) 
                      at android.view.View.updateDisplayListIfDirty(View.java:16048) 
                      at android.view.View.draw(View.java:16837) 
                      at android.view.ViewGroup.drawChild(ViewGroup.java:3764) 
                      at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3550) 
                      at android.view.View.updateDisplayListIfDirty(View.java:16048) 
                      at android.view.View.draw(View.java:16837) 
                      at android.view.ViewGroup.drawChild(ViewGroup.java:3764) 
                      at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3550) 
                      at android.view.View.draw(View.java:17074) 
                      at com.android.internal.policy.DecorView.draw(DecorView.java:751) 
                      at android.view.View.updateDisplayListIfDirty(View.java:16053) 
                      at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:656) 
                      at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:662) 
                      at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:770) 
                      at android.view.ViewRootImpl.draw(ViewRootImpl.java:2796) 
                      at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2604) 
                      at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2211) 
                      at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1246) 
                      at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6301) 
                      at android.view.Choreographer$CallbackRecord.run(Choreographer.java:871) 
                      at android.view.Choreographer.doCallbacks(Choreographer.java:683) 
                      at android.view.Choreographer.doFrame(Choreographer.java:619) 
                      at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:857) 
                      at android.os.Handler.handleCallback(Handler.java:751) 
                      at android.os.Handler.dispatchMessage(Handler.java:95) 
                      at android.os.Looper.loop(Looper.java:154) 
                      at android.app.ActivityThread.main(ActivityThread.java:6077) 
                      at java.lang.reflect.Method.invoke(Native Method) 
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866) 
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756) 

Ceci est mon code XML:

<?xml version="1.0" encoding="utf-8"?> 
<android.support.constraint.ConstraintLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
app:layout_behavior="@string/appbar_scrolling_view_behavior" 
tools:showIn="@layout/activity_main" 
tools:context="com.example.android.postvu.MainActivity"> 

<ImageView 
    android:id="@+id/imageView2" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:contentDescription="@string/background" 
    android:scaleType="centerCrop" 
    android:src="@drawable/grid" /> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="@string/image_view_editor" 
    android:textSize="28sp" 
    android:textStyle="bold" 
    android:textColor="@android:color/black" 
    android:id="@+id/textView" 
    android:layout_marginLeft="8dp" 
    app:layout_constraintLeft_toLeftOf="parent" 
    android:layout_marginRight="8dp" 
    app:layout_constraintRight_toRightOf="parent" 
    app:layout_constraintTop_toTopOf="parent" 
    android:layout_marginTop="8dp" /> 


<Button 
    android:layout_width="50dp" 
    android:layout_height="50dp" 
    android:background="@drawable/logo_black" 
    android:scaleType="centerCrop" 
    android:layout_marginLeft="8dp" 
    app:layout_constraintLeft_toLeftOf="parent" 
    android:layout_marginRight="8dp" 
    app:layout_constraintRight_toRightOf="parent" 
    app:layout_constraintBottom_toBottomOf="parent" 
    android:layout_marginBottom="8dp" 
    android:layout_marginTop="8dp" 
    app:layout_constraintTop_toBottomOf="@+id/textView" 
    app:layout_constraintVertical_bias="0.98" /> 

Image # 1 (Dans Android studio)

Android Studio

Image # 2 (Dans le émulateur)

Emulator

Répondre

2

Comment avez-vous importé votre image? Utilisez Image Assets dans Android Studio (clic droit dans votre répertoire Res et choisissez l'image) l'image sera générée correctement selon vos besoins

2

Vos actifs peuvent être trop grandes. Déplacez votre image dans le (haute résolution) drawable à drawable-xxhdpi. Dans ce cas, il pourrait être votre drawable/grid ou drawable/logo_black

Lire ce article pour plus de détails

1

vérifier votre journal d'erreur:

java.lang.RuntimeException: Canvas: trying to draw too large(110250000bytes) bitmap. 

votre image est trop large.one de ces solutions fixerez votre problème 1-Utilisez une bibliothèque comme Glide ou Piccaso pour charger vos images. 2-Si vous avez placé votre image dans votre dossier drawable, vous pouvez la déplacer vers drawable-xxxhdpi ou drawable-xxhdpi

1

Déplacez votre image dans le dessin (haute résolution) vers drawable-xxhdpi. Mais dans le développement de l'application, vous n'avez pas besoin d'utiliser pour agrandir votre image de votre fichier APK.

ou

La taille réelle de l'image était trop grand, donc le compresser.

1

L'image drawable que vous utilisez pour le bouton est trop grand et il est à peu près 100 Mo, réduisez la taille ou utiliser un autre drawable

1

Veuillez vérifier l'image de votre arrière-plan que vous avez utilisé dans votre bouton. Je pense que c'est trop grand que jeter l'exception au moment de dessiner l'image de drawable au fond du bouton.

android: background = "@ drawable/logo_black" vérifier ce fond taille de l'image

1

Votre image de fond est trop grand, vous devez définir la taille de l'écran. Pouvez-vous partager la largeur et la hauteur de votre arrière-plan.

1

Je pense que la taille de vos images est trop grande, vous devez donc compresser la taille de l'image, puis utiliser en mode image.

bitmap.compress(Bitmap.CompressFormat.JPEG, 70, stream); 

Ce code aide à compresser le fichier de grande taille. 1. Convertissez d'abord l'image en bitmap. 2. appliquez cette ligne sur un bitmap. 3. définir les données bitmap dans l'imageview