2017-07-18 135 views
0

我絕對有在Android應用程序設計中的體驗。我的一位朋友要我嘗試爲他們的應用創建一個功能,這就是我過去一週一直在努力做的事情。我需要做的第一件事是添加背景圖片(完成)添加一些文本(完成),並添加一個按鈕,打開菜單(問題)。在不添加按鈕的情況下,我可以在Android Studio的內置模擬器中運行應用程序,但即時添加button/imageButton應用程序崩潰。在這一點上,我甚至沒有試圖讓按鈕調出菜單,這是另一天。所有我試圖做的是讓按鈕不會崩潰的應用程序。我一直在看整個互聯網上的教程,文檔,甚至在堆棧溢出,但我無法找到任何東西。添加按鈕時應用程序崩潰 - Android

現在我還沒有開始使用Java代碼,我只使用XML代碼(見下文)。我將發佈錯誤消息(來自android監視器功能的消息),然後我將發佈我的設備在工作室中的外觀以及模擬器上顯示的消息的圖像。如果有人可以請幫助我,我會非常感激。

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) 

這是我的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" /> 

圖像#1(在Android Studio中)

Android Studio

圖像#2(在模擬器)

Emulator

回答

2

你是如何導入圖像的?在Android Studio中使用圖像資源(右鍵單擊您的Res目錄並選擇圖像資源)圖像將根據需要正確生成

2

你的資產可能過大。將您的圖片移至(高分辨率)drawabledrawable-xxhdpi。在這種情況下,它可能是你的drawable/griddrawable/logo_black

閱讀本article更多細節

1

檢查您的錯誤日誌:

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

你的形象實在是太這些解決方案的large.one將解決您的問題 1-使用Glide或Piccaso等庫來加載圖像。 2如果你把你的圖像放在你的可繪製文件夾中,你可以將它移動到drawable-xxxhdpi或drawable -xxhdpi

1

將圖像移動到(高分辨率)drawable到drawable-xxhdpi。但在應用程序開發中,您不需要使用大圖來增加APK文件的大小。

圖像的實際尺寸太大,所以壓縮它。

1

你使用該按鈕的可繪製的圖像是太大,它需要約100MB,無論是減少大小或使用其他繪製

1

請檢查您在使用按鈕,你的背景圖像。我認爲在按鈕背景繪製drawable圖像時拋出異常太大。

的android:背景=「@繪製/ logo_black」檢查這個背景圖片大小

1

你的背景圖片太大,你必須設置屏幕大小。你能分享你的背景的寬度和高度嗎?

1

我認爲您的圖像尺寸太大,因此您應該壓縮圖像大小,然後在imageview中使用。

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

此代碼有助於壓縮長尺寸文件。 1.首先將圖像轉換爲位圖。 2.在位圖上應用此行。 3.在圖像視圖中設置位圖數據