Ich verwende 2 Bilder für den Splash-Screen meiner App. Das Logo in meinem ImageView (src) und der Hintergrund im Layout (: Hintergrund) und obwohl meine App auf dem Emulator gut funktioniert, stürzt es auf meinem Handy ab (S8). Unten sehen Sie meine XML-Datei, die für meinen SplashScreen und die Ausnahme verantwortlich ist. Von dem, was ich verstehe, wird eines dieser Bilder (oder beide?) Als zu groß für den Speicher meines Telefons angesehen? Ihre Dimension ist jedoch: logo (1305x641) Hintergrund (1688x1125).App funktioniert auf Emulator, stürzt aber auf S8
Irgendwelche Ideen, wie Sie das beheben können? Ich dachte daran, verschiedene Auflösungsversionen der Bilder zur Verfügung zu stellen, aber ich verliere mich dabei.
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/background"
android:gravity="center_horizontal|center_vertical"
tools:context="com.spdesigns.funfacts.SplashScreen">
<ImageView
android:id="@+id/logoImageView"
android:layout_width="377dp"
android:layout_height="293dp"
android:layout_marginBottom="8dp"
android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:src="@drawable/logo"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout>
Ausnahme:
11-16 00:11:01.529 3688-3688/com.spdesigns.funfacts E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.spdesigns.funfacts, PID: 3688
java.lang.RuntimeException: Canvas: trying to draw too large(120362760bytes) bitmap.
at android.view.DisplayListCanvas.throwIfCannotDraw(DisplayListCanvas.java:260)
at android.graphics.Canvas.drawBitmap(Canvas.java:1420)
at android.graphics.drawable.BitmapDrawable.draw(BitmapDrawable.java:545)
at android.widget.ImageView.onDraw(ImageView.java:1286)
at android.view.View.draw(View.java:18394)
at android.view.View.updateDisplayListIfDirty(View.java:17372)
at android.view.View.draw(View.java:18156)
at android.view.ViewGroup.drawChild(ViewGroup.java:3969)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3755)
at android.view.View.draw(View.java:18397)
at android.view.View.updateDisplayListIfDirty(View.java:17372)
at android.view.View.draw(View.java:18156)
at android.view.ViewGroup.drawChild(ViewGroup.java:3969)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3755)
at android.view.View.updateDisplayListIfDirty(View.java:17367)
at android.view.View.draw(View.java:18156)
at android.view.ViewGroup.drawChild(ViewGroup.java:3969)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3755)
at android.view.View.updateDisplayListIfDirty(View.java:17367)
at android.view.View.draw(View.java:18156)
at android.view.ViewGroup.drawChild(ViewGroup.java:3969)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3755)
at android.view.View.updateDisplayListIfDirty(View.java:17367)
at android.view.View.draw(View.java:18156)
at android.view.ViewGroup.drawChild(ViewGroup.java:3969)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3755)
at android.view.View.updateDisplayListIfDirty(View.java:17367)
at android.view.View.draw(View.java:18156)
at android.view.ViewGroup.drawChild(ViewGroup.java:3969)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3755)
at android.view.View.draw(View.java:18397)
at com.android.internal.policy.DecorView.draw(DecorView.java:967)
at android.view.View.updateDisplayListIfDirty(View.java:17372)
at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:722)
at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:728)
at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:836)
at android.view.ViewRootImpl.draw(ViewRootImpl.java:3181)
at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2977)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2565)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1550)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7189)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:959)
at android.view.Choreographer.doCallbacks(Choreographer.java:734)
at android.view.Choreographer.doFrame(Choreographer.java:670)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:945)
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:6776)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410)
Es ist ziemlich beunruhigend, dass es auf einem Emulator funktionierte, irgendwie gegen seinen Zweck geht! Auch das wäre ein höllischer Download für einen Splash-Screen! –
@Moonbloom Ich komprimierte beide auf 30 ~ 40KB, aber ich bekomme den gleichen Fehler, dass ich versuche, eine 121500000Byte Bitmap zu zeichnen. Wie ist das möglich, seit ich sie komprimiert habe? –
Dann sind es nicht diese Bilder, die den Fehler verursachen. Kannst du versuchen, die Bilder buchstäblich zu entfernen und sie nicht als Hintergrund/Logo zu setzen, dann die App laufen lassen und sehen, was passiert? – Moonbloom