2011-08-30 85 views
0

我想在Android 2.1上构建一个动态壁纸,我无法弄清楚如何制作一个带有x-repeatable位图的矩形。Android位图平铺由X

Bitmap backWaveImage = BitmapFactory.decodeResource(res, R.drawable.test); 
BitmapDrawable backWave = new BitmapDrawable(backWaveImage); 

backWave.setTileModeX(TileMode.REPEAT); 
backWave.setBounds(0, this.horizon, 
      this.width, this.horizon + backWaveImage.getHeight()); 
backWave.draw(c); 

其中c - 是画布。 此代码不产生任何内容。

如果我添加backWave.setTileModeY(TileMode.REPEAT);我得到如下:

形象似乎被错误地缩放或不便。我有可绘制的目录中的图片,所以它正在放大。

如果我画一个图像(没有BitmapDrawable),一切看起来都很好。 我玩过Gravity,有各种TileModes。我甚至尝试使用Shader,但没有任何帮助。

这个问题让我发疯。请帮忙。

2 WarrenFaith

没有太多展示。我从CubeLiveWallpaper演示中获得了一个基本的drawFrame()函数。我相信它工作正常。

我做了更多的测试。这次是5x5红色正方形与白色中心。

backWave.setTileModeX(TileMode.REPEAT); 
backWave.setGravity(Gravity.LEFT | Gravity.TOP); 
backWave.setTileModeY(TileMode.REPEAT); 

此代码将产生以下:

广场被缩放为8×8像素,这是确定的,但它绝对是错位的。

backWave.setTileModeX(TileMode.REPEAT); 
backWave.setGravity(Gravity.LEFT | Gravity.TOP); 
backWave.setTileModeY(TileMode.CLAMP); 

让我意想不到的事情:

enter image description here

+0

你能否提供完整的绘制方法和你真正得到的东西?它很难理解确切的问题 – WarrenFaith

回答

0

嗯,我已经想通了。

我的照片是10x10像素。 当我用:

backWave.setBounds(0, 486, 480, 496); 

我得到了讨厌的图像。 当,我用:

backWave.setBounds(0, 480, 480, 490); 

一切都很好。