在画布上平铺位图

Pau*_*ega 11 android tiling canvas bitmap

我想创建一个'方格纸'外观我正在通过画布绘制的位图,并试图找出最佳方法来实现这一点.

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

我试过的一些解决方案:

  • 我已经尝试在我的SurfaceView的Thread.run()中实现这个解决方案,但我相信的问题是当BitmapDrawable转换为Bitmap时...它会丢失平铺属性.

    canvas = 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);

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

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

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

Rom*_*Guy 27

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

  • 要么使用BitmapDrawable,而不是提取Bitmap,只需调用BitmapDrawable.draw(Canvas).不要忘记设置drawable的边界来填充绘图区域.
  • 使用BitmapShader创建一个Paint并用它绘制一个矩形(这基本上是BitmapDrawable所做的).

  • 也许你注意到你必须设置myBitmapDrawable.setTileModeX(Shader.TileMode.REPEAT); 和myBitmapDrawable.setTileModeY(Shader.TileMode.REPEAT); 实际绘制平铺... (6认同)
  • 使用BitmapDrawable.draw(Canvas)方法,效果很好,谢谢! (2认同)