11

我想为我通过画布绘制的位图创建一个“方格纸”外观,并试图找出最好的方法来做到这一点。

我无法将包含方格纸背景的源位图传递给 Canvas 构造函数,因为我正在通过 .lockCanvas() 调用在 SurfaceView 中获取 Canvas。

我尝试过的一些解决方案:

  • 我已经尝试在我的 SurfaceView 的 Thread.run() 中实现此解决方案,但我认为问题是当 BitmapDrawable 转换为位图时......它会失去平铺属性。

    画布 = mSurfaceHolder.lockCanvas(null); BitmapDrawable TileMe = new BitmapDrawable(BitmapFactory.decodeResource(getResources(), R.drawable.editor_graph)); TileMe.setTileModeX(Shader.TileMode.REPEAT); TileMe.setTileModeY(Shader.TileMode.REPEAT);

    位图 b = TileMe.getBitmap(); canvas.drawBitmap(b, 0, 0, null);

  • 如果我使用将目标 RectF 作为参数的 Canvas.drawBitmap 方法,看起来位图将被平铺以填充 RectF...但是如何可靠地声明填充整个视图区域的 RectF?

  • 将活动背景设置为所需的方格纸外观也不起作用,因为位图/画布布局是不透明的,并且会阻止被看到。

任何想法如何实现这一目标?

4

2 回答 2

27

您有两个简单的解决方案:

  • 要么使用 BitmapDrawable,但不提取 Bitmap,只需调用 BitmapDrawable.draw(Canvas)。不要忘记设置可绘制的边界以填充您的绘图区域。
  • 使用 BitmapShader 创建一个 Paint 并用它绘制一个矩形(这基本上是 BitmapDrawable 所做的)。
于 2011-01-29T20:18:59.363 回答
-3

我确信有一种方法可以使用SurfaceView. 不幸的是,您似乎无法将BitmapDrawable与画布一起使用。因此,您可能必须通过在Rect上创建自己的一系列 'Canvas并为每个 ' 绘制缩放位图来实现自己的自定义平铺方法。

老实说,这不会那么难。只需获取视图的宽度/高度,并Rect根据您将绘制到的数据创建一个 '数组Bitmap

或者,如果您不需要即时修改实际的平铺背景,只需将其绘制为背景并SurfaceView在其顶部绘制。您链接的那篇文章提供了多种解决方案来平铺BitmapDrawable您可以实现的。

于 2011-01-29T19:56:21.070 回答