在画布上平铺一个位图

我想创建一个'方格纸'看我正在通过画布绘制的位图,并试图找出最好的方法来做到这一点。

我无法将包含图形纸张背景的源位图传递给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);

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

  • 将活动背景设置为所需的图形纸外观也不起作用,因为位图/画布布局是不透明的并阻止看到。
  • 任何想法如何实现这一目标?


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

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

  • 我确定有一种方法可以使用SurfaceView获得平铺效果。 不幸的是,它看起来像你不能用画布使用BitmapDrawable 。 因此,您可能必须通过在Canvas上创建自己的一系列Rect并为每个绘制缩放位图来实现自己的自定义拼贴方法。

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

    或者,如果您不需要对实际平铺背景进行实时修改,只需将其绘制为背景并在其上绘制SurfaceView 。 您链接的帖子提供了多个解决方案来平铺您可以实现的BitmapDrawable

    链接地址: http://www.djcxy.com/p/63779.html

    上一篇: Tiling a Bitmap on a Canvas

    下一篇: How to create Drawable from resource