平铺drawable有时延伸

我有一个ListView的项目有平铺背景。 要做到这一点,我使用以下可绘制的XML:

<bitmap xmlns:android="http://schemas.android.com/apk/res/android" android:src="@drawable/tile" android:tileMode="repeat" /> 

通常,这是有效的。 然而,有时候,src drawable不是平铺的,而是延伸到填充整个列表项的。 (我有几个不同的瓷砖,我把它们混合在一个ListView中,如果有拉伸而不是平铺的话,那么它就不会一次完成,因为这是值得的。

我也尝试将android:dither="true"到该xml中,因为我在某处阅读,没有它可能会有错误。 这并没有改变任何东西。

有没有人有同样的问题? 你怎么修好它的?

我也被这个问题困住了。 很难诊断,甚至更难find类似的报告和可用的解决scheme。

freenode上的“Tapas”#android-dev irc频道附带下列实用程序方法:

 public static void fixBackgroundRepeat(View view) { Drawable bg = view.getBackground(); if (bg != null) { if (bg instanceof BitmapDrawable) { BitmapDrawable bmp = (BitmapDrawable) bg; bmp.mutate(); // make sure that we aren't sharing state anymore bmp.setTileModeXY(TileMode.REPEAT, TileMode.REPEAT); } } } 

将其应用于所有具有平铺背景设置的视图(例如findViewById)。

另外,在AndroidManifest.xml中设置“anyDensity = true”之后,我觉得这个bug已经开始了

除了使用CLAMP TileMode之外,我只是遇到了完全相同的问题。 我有一个位图,然后只是放在底部,并将其设置为一个XML定义的BitmapDrawable,并且在graphics预览窗口中一切看起来都很好,无论我使用什么大小的ViewImage在顶部绘制位图然后重复最后一个像素填充到最后。

在模拟器和我自己的手机上启动各种SDK版本的应用程序,然后产生一个完全无用的直接“填充”types的失真。

解决scheme原来只是重新应用TileMode每次我改变我的代码中的ImageView的大小:

 ((BitmapDrawable)ascender.getDrawable()).setTileModeY(TileMode.CLAMP); 

现在都画好了。 所以是的,这看起来像一个bug。

由于我没有在这里看到链接,这被证实是 Android中的一个错误 。 它在ICS中得到了修复。 看到XML可绘制的位图tileMode错误? 更多细节。

网上有很多关于这个话题的噪音,有各种(和许多)build议的解决scheme。

  • 如果您仍然处于亏损状态,我的build议是将所有平铺的位图资源保持为基本2维的平方

即:对于xhdpi贴图资源,为16px x 16px。

我希望如果位图没有完美镶嵌,那么Android平台将会“叠加”来填充空间,然后修剪浪费。 然而,试图跨越mdpi,hdpi和xhdpi(以及v2.3到v4.0)“不一致”的10px * 10px平铺位图显示了这种延伸。

基础2维度允许您在完成各种分辨率的同时进行整体甚至分割,并且每次创build视图时,每个设备都会尝试绘制切片。

在Android开发中,我们会与硬件和供应商进行对抗,并将其手指放在平台上 – 有时候这种微不足道的黑魔法正好适用。

这似乎至less已经解决了我的问题。 值得一试。

这听起来像一个错误,虽然我从来没有见过它自己。 如果您有一个简单的APK重现问题,请发送给我(romainguy / at / android.com)或在这里提交一个错误。

这个博客条目讨论了这个问题

结合Ivo van der Wijk列出的Tapas 解决scheme ,它适用于我。

关键是从XML中移除平铺设置,然后在运行时将其设置为平铺。 如果他们都被设置为平铺,这对我不起作用。

编辑:其实,我撒谎。 即使这样,它似乎有时不能平铺。

有一个可靠的解决方法将是非常好的。

编辑2:将其设置为其他内容(例如,CLAMPED),然后将其设置回目前似乎正在工作。

在运行棒棒糖的旧设备上仍然遇到此问题,发生在方向更改上。 以编程方式设置平铺模式不起作用,但是这个答案是: https : //stackoverflow.com/a/13480444/658727

我把我的图像从drawable-xhdpidrawable文件夹,一切都很好。

我也有同样的问题。 我所缺less的是,我们需要在imageview中添加scaletype以适合xml,以便xml位图正常工作。

tile_bitmap.xml

 <bitmap xmlns:android="http://schemas.android.com/apk/res/android" android:src="@drawable/tile" android:tileMode="repeat" /> 

layout.xml

 <ImageView android:layout_width="match_parent" android:src="@drawable/tile_bitmap" android:layout_height="match_parent" android:scaleType="fitXY"/>