我想通过Canvas为我绘制的Bitmap创建一个'graph paper'外观,并试图找出最佳方法。
我无法将包含方格纸背景的源位图传递给Canvas构造函数,因为我通过.lockCanvas()调用在SurfaceView中获取Canvas。
我尝试过的一些解决方案:
我尝试在我的SurfaceView的Thread.run()中实现this solution,但我认为问题是当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 method that takes a destination RectF as a parameter,看起来位图将被平铺以填充RectF ...但是如何可靠地声明填充整个视图区域的RectF?
任何想法如何实现这一目标?
答案 0 :(得分:27)
您有两个简单的解决方案:
答案 1 :(得分:-3)
我确信有一种方法可以使用SurfaceView
获得平铺效果。不幸的是,看起来你不能在画布上使用BitmapDrawable
。因此,您可能必须通过在Rect
上创建自己的Canvas
系列并为每个方法绘制缩放位图来实现自己的自定义平铺方法。
老实说,这并不难。只需获取视图的宽度/高度,然后根据您将Rect
绘制到的数据创建一个Bitmap
数组。
或者,如果您不需要动态修改实际的平铺背景,只需将其绘制为背景并在其上绘制SurfaceView
。您关联的帖子提供了多种解决方案,可以平铺您可以实施的BitmapDrawable
。