Büyük bitmap'leri parçalamak için BitmapRegionDecoder
'u kullanabilirsiniz (API düzeyi 10 gerektirir). Bu sınıf kullanmak ve içine konabilir tek Drawable
dönecektir bir yöntem yazdı ettik bir ImageView
: yöntem çekilebilir kaynak hem de MAX_SIZE
(1024) daha küçük olup olmadığını görmek için kontrol eder
private static final int MAX_SIZE = 1024;
private Drawable createLargeDrawable(int resId) throws IOException {
InputStream is = getResources().openRawResource(resId);
BitmapRegionDecoder brd = BitmapRegionDecoder.newInstance(is, true);
try {
if (brd.getWidth() <= MAX_SIZE && brd.getHeight() <= MAX_SIZE) {
return new BitmapDrawable(getResources(), is);
}
int rowCount = (int) Math.ceil((float) brd.getHeight()/(float) MAX_SIZE);
int colCount = (int) Math.ceil((float) brd.getWidth()/(float) MAX_SIZE);
BitmapDrawable[] drawables = new BitmapDrawable[rowCount * colCount];
for (int i = 0; i < rowCount; i++) {
int top = MAX_SIZE * i;
int bottom = i == rowCount - 1 ? brd.getHeight() : top + MAX_SIZE;
for (int j = 0; j < colCount; j++) {
int left = MAX_SIZE * j;
int right = j == colCount - 1 ? brd.getWidth() : left + MAX_SIZE;
Bitmap b = brd.decodeRegion(new Rect(left, top, right, bottom), null);
BitmapDrawable bd = new BitmapDrawable(getResources(), b);
bd.setGravity(Gravity.TOP | Gravity.LEFT);
drawables[i * colCount + j] = bd;
}
}
LayerDrawable ld = new LayerDrawable(drawables);
for (int i = 0; i < rowCount; i++) {
for (int j = 0; j < colCount; j++) {
ld.setLayerInset(i * colCount + j, MAX_SIZE * j, MAX_SIZE * i, 0, 0);
}
}
return ld;
}
finally {
brd.recycle();
}
}
eksenleri. Öyleyse, sadece çekilebilir. Değilse, görüntüyü parçalayacak ve görüntünün parçalarını çözecek ve bunları
LayerDrawable
'a yerleştirecektir.
1024'ü seçtim çünkü çoğu telefonun görüntüleri en azından o kadar büyük ölçüde destekleyeceğine inanıyorum.Bir telefon için gerçek doku boyutu sınırını bulmak istiyorsanız, OpenGL ile bazı garip şeyler yapmalısınız, ve ben de içine dalmak istediğim bir şey değil.
Resimlerinize nasıl eriştiğinizden emin değildim, bu nedenle onların çekilebilir klasörünüzde olduğunu varsaydım. Durum böyle değilse, ihtiyacınız olan herhangi bir parametreyi almak için yöntemi yeniden düzenlemek oldukça kolay olmalıdır.
Bunun hakkında emin değilim, ancak bunun yerine bir WebView kullanmayı denediniz mi? –
Gerçekten de, bir liste görünümünde rastgele yerleştirilmiş çok sayıda çok sayıda imge var. Performansı dikkate almalıyım ve bu oldukça kötü bir fikir gibi geliyor .. – woot
Bu güzel projeye bir göz atın: https://github.com/ened/Android-Tiling-ScrollView –