【问题标题】:Nothing happens after instantiate Canvas on android在 android 上实例化 Canvas 后没有任何反应
【发布时间】:2017-01-20 15:03:42
【问题描述】:

我不知道Canvas 发生了什么:

// @param String source
Bitmap bmp = BitmapFactory.decodeFile(source);

Log.i("output", "This message will be printed!");

Canvas canvas = new Canvas(bmp);

Log.i("output", "This message will NOT be printed, canvas stop all!");

实例化Canvas 后,没有打印任何内容,我无法运行任何代码,但应用程序没有关闭。

► 运行(调用后输出):

D/dalvikvm:GC_CONCURRENT 释放 131K,4% 释放 11360K/11783K,暂停 11ms+1ms,总共 15ms

D/OpenGLRenderer: TextureCache::callback: name, 移除大小, mSize = 22, 33856, 1157696

D/OpenGLRenderer: TextureCache::callback: name, 移除大小, mSize = 24, 36864, 1120832

【问题讨论】:

  • 但是你不会在任何地方传递画布。它会画在哪里?另外,您的Bitmap 的大小是多少?也许它太大了。
  • @Ekalips 我的图像较小,仅用于在模拟器上进行测试,如果需要,我实例化了 Canvas 以便在需要时使用它的实例,这是问题吗?谢谢你!
  • 您确定没有打印第二个 Log.d 吗?时间过去后?如果它没有抛出异常,那么它必须达到那个点。也许您应该尝试使用调试器来确保 Bitmap 已成功加载。
  • @Ekalips 你帮我说:“它会在哪里画?”,我改为:canvas = new Canvas(); canvas.drawBitmap(bmp, 0, 0, null);感谢您的支持,不便之处敬请见谅
  • 很高兴能帮到你)

标签: java android


【解决方案1】:

您需要使用 bmp 的属性创建另一个位图并将其传递给画布:

Bitmap bmp = BitmapFactory.decodeFile(source);
Bitmap bmOverlay = Bitmap.createBitmap(bmp.getWidth(),bmp.getHeight(),bmp.getConfig());
Canvas canvas = new Canvas(bmOverlay);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多