Android、Java、Web系、Linux、マラソン等の備忘録

2012/12/20

背景をandroid:tileMode=”repeat”してるのに突然引き延ばされたようになる

0 件のコメント
ListViewの各項目の背景をdrawableで表題のように繰り返し表示をさせていたのですが、Andoidの2.1の実機で確認したら、それまで繰り返されてたはずの背景が引き延ばされたように表示されるようになりました。以下のような特徴があります。
  • アンインストールしても解消されず
  • 他のアプリではリピートが効いている
  • drawableのxmlファイルを変更しても解消されず
ググったら全く同じ症状の記事発見!
・android:tileMode=”repeat”が効かないケース – CEED
http://blog.ceed.jp/?p=339
確かにキャッシュっぽい感じではあるんですが、それを解く術がわからない.....
Stack Overflowではよくある質問のようで、
・background image not repeating in android layout - Stack Overflow
http://stackoverflow.com/questions/4077487/background-image-not-repeating-in-android-layout
 Honeycomb以前のバグのようです。もっとも支持されてる回答、

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

を適用したところリピートするようになりました。動的にリピートを指定してやらないといけないのですね。こういう再現させるのが不明なバグを発見できて良かったです。



0 件のコメント :

コメントを投稿