【问题标题】:Cannot set high resolution image(1920x1280) to image view on android 7.0无法在 android 7.0 上将高分辨率图像(1920x1280)设置为图像视图
【发布时间】:2018-04-27 00:24:24
【问题描述】:

我在很多设备上运行这个应用程序。低于 android 7 和高于 android 7,没关系。但是当我在 samsung s6(android 7.0) 上运行这个应用程序时,它给出了这个错误

致命异常:java.lang.RuntimeException:Canvas:试图绘制 太大(120422400 字节)位图。 在 android.view.DisplayListCanvas.throwIfCannotDraw(DisplayListCanvas.java:260) 在 android.graphics.Canvas.drawBitmap(Canvas.java:1420) 在 android.graphics.drawable.BitmapDrawable.draw(BitmapDrawable.java:545) 在 android.view.View.getDrawableRenderNode(View.java:18591) 在 android.view.View.drawBackground(View.java:18527) 在 android.view.View.draw(View.java:18315) 在 android.view.View.updateDisplayListIfDirty(View.java:17302) 在 android.view.View.draw(View.java:18086) 在 android.view.ViewGroup.drawChild(ViewGroup.java:3966) 在 android.view.ViewGroup.dispatchDraw(ViewGroup.java:3752) 在 android.view.View.updateDisplayListIfDirty(View.java:17297) 在 android.view.View.draw(View.java:18086) 在 android.view.ViewGroup.drawChild(ViewGroup.java:3966) 在 android.view.ViewGroup.dispatchDraw(ViewGroup.java:3752) 在 android.view.View.updateDisplayListIfDirty(View.java:17297) 在 android.view.View.draw(View.java:18086) 在 android.view.ViewGroup.drawChild(ViewGroup.java:3966) 在 android.view.ViewGroup.dispatchDraw(ViewGroup.java:3752) 在 android.view.View.updateDisplayListIfDirty(View.java:17297) 在 android.view.View.draw(View.java:18086) 在 android.view.ViewGroup.drawChild(ViewGroup.java:3966) 在 android.view.ViewGroup.dispatchDraw(ViewGroup.java:3752) 在 android.view.View.updateDisplayListIfDirty(View.java:17297) 在 android.view.View.draw(View.java:18086) 在 android.view.ViewGroup.drawChild(ViewGroup.java:3966) 在 android.view.ViewGroup.dispatchDraw(ViewGroup.java:3752) 在 android.view.View.updateDisplayListIfDirty(View.java:17297) 在 android.view.View.draw(View.java:18086) 在 android.view.ViewGroup.drawChild(ViewGroup.java:3966) 在 android.view.ViewGroup.dispatchDraw(ViewGroup.java:3752) 在 android.view.View.draw(View.java:18327) 在 com.android.internal.policy.DecorView.draw(DecorView.java:919) 在 android.view.View.updateDisplayListIfDirty(View.java:17302) 在 android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:692) 在 android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:698) 在 android.view.ThreadedRenderer.draw(ThreadedRenderer.java:806) 在 android.view.ViewRootImpl.draw(ViewRootImpl.java:3135) 在 android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2931) 在 android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2523) 在 android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1522) 在 android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7098) 在 android.view.Choreographer$CallbackRecord.run(Choreographer.java:927) 在 android.view.Choreographer.doCallbacks(Choreographer.java:702) 在 android.view.Choreographer.doFrame(Choreographer.java:638) 在 android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:913) 在 android.os.Handler.handleCallback(Handler.java:751) 在 android.os.Handler.dispatchMessage(Handler.java:95) 在 android.os.Looper.loop(Looper.java:154) 在 android.app.ActivityThread.main(ActivityThread.java:6682) 在 java.lang.reflect.Method.invoke(Method.java) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410)

【问题讨论】:

    标签: android crash imageview runtime-error android-7.0-nougat


    【解决方案1】:

    将(高分辨率)drawable 中的图像移动到清单文件中的 drawable-xxhdpi 和 largeheap=true。

    【讨论】:

    • 感谢 Jayas 的重播。我也这样做了,但是没有用
    • @J.D 对于大图像,似乎只有像 Picasso 或 Glide 这样的库可以工作。否则,您分配的 RAM 过多,应用程序会因 OOME 而崩溃。
    【解决方案2】:

    如果你尝试在android中显示太大的图像,它会抛出OutOfMemory错误,你必须缩小它或调整它,看看这个

    How to Resize a Bitmap in Android?

    【讨论】:

      猜你喜欢
      • 2017-08-23
      • 2014-11-20
      • 1970-01-01
      • 1970-01-01
      • 2012-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-25
      相关资源
      最近更新 更多