私のアプリのスプラッシュ画面に2つの画像を使用しています。私のImageView(src)のロゴとレイアウトの背景(:background)、私のアプリはエミュレータ上でうまく動作しますが、私の電話(S8)でクラッシュします。私のsplashScreenと例外の原因となるxmlファイルが表示されます。私が理解していることから、その画像の1つ(またはその両方)は、私の電話の記憶には大きすぎると考えられていますか?しかし、彼らの次元は: ロゴ(1305x641) 背景(1688x1125)です。アプリはエミュレータで動作しますが、S8でクラッシュします
これを修正する方法についてのご意見はありますか?私はイメージの異なる解像度のバージョンを提供することを考えましたが、私はプロセスで迷うことがあります。
<?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>
例外:
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)
エミュレータで動作していたのはかなり心配ですが、その目的に反するものです!また、それはスプラッシュスクリーン用のプレイストアダウンロードの1つの地獄でした! –
@Moonbloom私はそれぞれ30〜40KBに圧縮しましたが、私は同じエラーが出て、私は121500000byteのビットマップを描こうとしています。私はそれらを圧縮してからどのように可能ですか? –
それはエラーの原因となる画像ではありません。文字通り画像を削除し、背景/ロゴとして設定しないで、アプリを実行して何が起こるかを確認できますか? – Moonbloom