【问题标题】:canvas.drawBitmap is not drawing anythingcanvas.drawBitmap 没有画任何东西
【发布时间】:2014-01-13 00:29:07
【问题描述】:

我已经用DragShadowBuilder 覆盖了onDragShadow,就像这样

@Override
    public void onDrawShadow(Canvas canvas) {
        super.onDrawShadow(canvas);
        Bitmap bitmap = InGameActivity.getRandomBitmap();
        Rect source = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
        canvas.drawBitmap(bitmap, source, source, null);

    }

我已验证位图不为空,但当我拖动时,没有显示任何内容。任何想法为什么?

【问题讨论】:

  • 您检查过位图不为空吗?尝试记录一些 getPixel() 调用。
  • 试试 canvas.drawBitmap(bitmap, null, source, null);由于将 src 和 dst 设置为同一个对象,可能会发生冲突。如果您不需要绘制位图的子集(即您想要整个东西),那么 src 应该为空。
  • @NigelK 啊,是的,那行得通。请发表您的评论作为答案,以便我投票并接受
  • @Clay - 很高兴它起作用了(这只是一个有根据的猜测,因此我没有将其作为答案发布)。

标签: android android-canvas draw


【解决方案1】:

如果你想按原样绘制位图(即你想要整个东西),使用:

canvas.drawBitmap(bitmap, null, source, null);

第二个参数用于您需要指定要绘制的位图子集的位置(如果不需要子集,它可以为空)。如果您将 src 和 dst(第 2 和第 3 个参数)设置为同一个对象,我预计该方法中存在冲突。

【讨论】:

  • 这段代码令人困惑,因为“源”是指第二位,而不是第三位。也许矩形应该重命名为“dst”?这样你就不会混淆 'src' 和 'dst' 了。
【解决方案2】:

清单:

  1. 位图是否有效,即不是全部透明或与背景颜色相同?您可以在 Android Studio 调试器中轻松查看。

  2. 您的源矩形(即参数 2,而不是上面混淆显示的 3)是否在位图的范围内?您可以将其设置为 null,这可能是一个很好的调试步骤。

  3. 您的目标矩形是否在画布范围内?

  4. 您是否有第 4 个参数“paint”,它的 alpha 值较低?尝试 'paint.setAlpha(255)' 或使用 'null' 作为第四个参数。

  5. 您是否在控制台中看到此消息? “OpenGLRenderer:位图太大而无法上传到纹理中”?如果是这样,请参阅:"Bitmap too large to be uploaded into a texture"

【讨论】:

  • 很棒的答案,谢谢。还有一件事。就我而言,问题出在“错误”的画布上。我的意思是它是另一个视图上的画布。罕见的错误,但也有可能。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-14
  • 1970-01-01
相关资源
最近更新 更多