Tiled drawable sometimes stretches



43 down vote favorite
21

I have a ListView whose items have a tiled background. To accomplish this, I use the following drawable xml:

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

Usually, this works. Sometimes, however, the src drawable isn't tiled, but stretched to fill the entire list item. (I've got several different tiles like this, and I use them mixed in one ListView. If there is stretching instead of tiling, it's never been in all of them at once, for what that's worth.)

I also tried to add android:dither="true" to that xml, since I read somewhere that without it there might be bugs. That didn't change anything.



up vote 24 down vote

I also got bitten by this problem. Very hard to diagnose, even harder to find similar reports and usable solutions.

"Tapas" on the freenode #android-dev irc channel came with the following utility method:

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); } } }

Apply it to all Views that have a tiled background set (e.g. findViewById them).

Also, I have the impression this bug started acting up after setting "anyDensity=true" in AndroidManifest.xml


 
 
 
Thanks, it helped, at least for now. –   jki  Apr 16 '12 at 18:53
 
This solution works. Thank you :) –   dineth  Jun 14 '12 at 0:35
1  
How do I apply it to a drawable defined in xml? I use this drawable within a <selector > –   Kirill Kulakov  Jan 31 '13 at 13:56
 
This solution works for me too, but view background was not set strangely so I have to add view.setBackgroundResource(R.drawable.bg_striped_img); before view.getBackground(); . Thank you :) –  letroll  Mar 11 '13 at 12:26 
 
Thanks,it works for me –   penghaitao  Aug 30 '13 at 2:29
add comment
43 down vote favorite
21

I have a ListView whose items have a tiled background. To accomplish this, I use the following drawable xml:

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

Usually, this works. Sometimes, however, the src drawable isn't tiled, but stretched to fill the entire list item. (I've got several different tiles like this, and I use them mixed in one ListView. If there is stretching instead of tiling, it's never been in all of them at once, for what that's worth.)

I also tried to add android:dither="true" to that xml, since I read somewhere that without it there might be bugs. That didn't change anything.


http://stackoverflow.com/questions/4336286/tiled-drawable-sometimes-stretches/5852198#5852198

你可能感兴趣的:(Tiled drawable sometimes stretches)