타 일드 드로어 블이 때때로 늘어남
항목에 바둑판 식 배경이있는 ListView가 있습니다. 이를 위해 다음 드로어 블 xml을 사용합니다.
<bitmap
xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/tile"
android:tileMode="repeat" />
일반적으로 이것은 작동합니다. 그러나 때로는 src 드로어 블이 타일링되지 않고 전체 목록 항목을 채우기 위해 늘어납니다. (나는 이와 같은 여러 개의 타일을 가지고 있으며 하나의 ListView에서 혼합하여 사용합니다. 타일링 대신 늘이는 것이 있으면 그만한 가치가 있기 때문에 한 번에 모든 타일에 포함되지 않았습니다.)
나는 또한 android:dither="true"
어딘가에서 버그가있을 수 있다는 것을 읽었 기 때문에 그 xml 에 추가하려고했습니다 . 그것은 아무것도 바꾸지 않았습니다.
누구든지 같은 문제가 있었습니까? 어떻게 고쳤나요?
나는 또한이 문제에 물렸다. 진단하기가 매우 어렵고 유사한 보고서와 사용 가능한 솔루션을 찾기가 더 어렵습니다.
freenode # android-dev irc 채널의 "Tapas"는 다음과 같은 유틸리티 메소드와 함께 제공됩니다.
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"를 설정 한 후이 버그가 작동하기 시작했다는 인상을 받았습니다.
CLAMP TileMode를 제외하고 정확히 동일한 문제가 발생했습니다. 나는 내가 원하는 비트 맵을 맨 아래에서 늘리고 XML 정의 BitmapDrawable로 설정하고 그래픽 미리보기 창에서 모든 크기에 상관없이 ViewImage를 만들어 내 비트 맵을 맨 위에 그립니다. 그런 다음 마지막 픽셀을 반복하여 끝까지 채 웁니다.
에뮬레이터와 내 휴대폰에서 빌드 된 다양한 SDK에서 앱을 실행하면 완전히 쓸모없는 직선 '채우기'유형 왜곡이 생성되었습니다.
해결책은 코드 내에서 ImageView의 크기를 변경할 때마다 TileMode를 다시 적용하는 것으로 밝혀졌습니다.
((BitmapDrawable)ascender.getDrawable()).setTileModeY(TileMode.CLAMP);
이제 모든 것이 잘 그려집니다. 네, 이것은 나에게 버그처럼 보입니다.
여기에 링크가 표시되지 않았기 때문에 이것은 Android 의 버그 로 확인되었습니다 . ICS에서 수정되었습니다. XML 드로어 블 비트 맵 tileMode 버그를 참조하십시오 . 상세 사항은.
다양한 (그리고 수많은) 제안 된 솔루션과 함께 온라인에서이 주제에 대한 많은 소음이 있습니다.
- 여전히 잃어버린 경우 모든 타일 비트 맵 리소스를 정사각형, base-2 차원 으로 유지 하는 것이 좋습니다 .
즉 : xhdpi 타일 자산의 경우 16x16 픽셀입니다.
나는 안드로이드 플랫폼이 비트 맵이 완벽하게 테셀레이션되지 않으면 공간을 채우기 위해 "오버 타일 (over-tile)"이되기를 바랐다. 그러나 mdpi, hdpi 및 xhdpi (및 v2.3에서 v4.0까지)에 걸쳐 10px * 10px 타일 비트 맵을 '일관되지 않게'시도하면 이러한 확장이 나타납니다.
base-2 차원은 다양한 해상도를 진행하고 각 장치가 뷰가 생성 될 때마다 타일을 칠하려고 할 때 전체 및 균등 분할을 허용합니다.
Android 개발에서 우리는 다양한 하드웨어와 벤더가 플랫폼에 손을 대고 경쟁합니다. 때로는 이런 사소한 흑 마법이 제대로 작동하기도합니다.
이것은 적어도 나를 위해 문제를 해결 한 것으로 보입니다. 한 번의 가치가 있습니다.
내가 직접 본 적이 없지만 이것은 버그처럼 들립니다. 문제를 재현하는 간단한 APK가있는 경우 저에게 보내거나 (romainguy / at / android.com) 여기 에서 버그를 신고 하세요 .
이 블로그 항목은 문제에 대해 설명합니다.
Ivo van der Wijk가 나열한 Tapas 의이 솔루션 과 결합하면 저에게 효과적입니다.
핵심은 XML에서 바둑판 식 설정 을 제거한 다음 런타임에 바둑판 식으로 설정하는 것이 었습니다. 둘 다 타일로 설정된 경우에는 작동하지 않습니다.
편집 : 사실, 나는 거짓말을했다. 이것으로도 때때로 타일에 실패하는 것 같습니다.
안정적인 해결 방법이 있으면 매우 좋을 것입니다.
편집 2 : 다른 것으로 설정 (예 : CLAMPED) 한 다음 지금까지 다시 설정하는 것이 작동하는 것 같습니다.
Lollipop을 실행하는 구형 장치에서이 문제가 여전히 발생하며 방향 변경시 발생합니다. 프로그래밍 방식으로 타일 모드를 설정하는 것은 작동하지 않았지만이 답변은 작동했습니다. https://stackoverflow.com/a/13480444/658727
내 이미지를 drawable-xhdpi
에서 drawable
폴더 로 옮겼는데 모든 것이 정상이었습니다.
나는 또한 같은 문제를 겪고 있었다. 내가 놓친 것은 xml 비트 맵이 제대로 작동하려면 imageview에서 fitXY에 scaletype을 추가해야한다는 것입니다.
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"/>
참조 URL : https://stackoverflow.com/questions/4336286/tiled-drawable-sometimes-stretches
'programing' 카테고리의 다른 글
Spring 관리 컨텍스트 외부의 클래스에 Bean 주입 (0) | 2021.01.15 |
---|---|
호스트에 대한 pg_hba.conf 항목이 없습니다. (0) | 2021.01.15 |
iOS 7 : 전체 앱에 대해 UINavigationBar 반투명 비활성화 (0) | 2021.01.15 |
컨볼 루션 신경망의 배치 정규화 (0) | 2021.01.15 |
열, 마지막 항목 너비로 네이티브 FlatList 반응 (0) | 2021.01.15 |