平铺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中,因为我在某处阅读时没有它可能存在错误。 这并没有改变任何事情。

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


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

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,并且在图形预览窗口中看起来都很好,无论我使用ViewImage的大小如何在顶部绘制位图然后重复最后一个像素填充到最后。

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

解决方案结果是,每当我在我的代码中更改ImageView的大小时,都会重新应用TileMode:

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

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


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

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

上一篇: Tiled drawable sometimes stretches

下一篇: How to remove white space when attaching fragment to framelayout