我知道,你寫道,你可以瀏覽所有的資源,並與位圖大小比較大小。但我不知道,如果你認爲它和我一樣,那麼這可能會幫助你或其他人。
所以這是我做到的。首先,我爲所有可繪製圖像加載大小(以字節爲單位)。
String defType = "drawable";
String drawableDirPrefix = "res/drawable";
SparseArray<SparseArray<String>> resourceDirs = new SparseArray<SparseArray<String>>();
ZipInputStream apk = null;
try {
apk = new ZipInputStream(new FileInputStream(getPackageResourcePath()));
ZipEntry entry = null;
while ((entry = apk.getNextEntry()) != null) {
String resourcePath = entry.getName();
if (resourcePath.startsWith(drawableDirPrefix)) {
int firstSlashPos = resourcePath.indexOf('/');
int lastSlashPos = resourcePath.lastIndexOf('/');
int dotPos = resourcePath.lastIndexOf('.');
String resourceDir = resourcePath.substring(firstSlashPos + 1, lastSlashPos);
String resourceName = resourcePath.substring(lastSlashPos + 1, dotPos);
int resourceId = getResources().getIdentifier(resourceName, defType, getPackageName());
int resourceSize = (int) entry.getSize();
SparseArray<String> resourceInfo = resourceDirs.get(resourceId);
if (resourceInfo == null) {
resourceInfo = new SparseArray<String>();
resourceInfo.append(resourceSize, resourceDir);
resourceDirs.append(resourceId, resourceInfo);
} else {
resourceInfo.append(resourceSize, resourceDir);
}
}
}
} catch (IOException e) {
Log.e("tag", "Error", e);
} finally {
if (apk != null) {
try {
apk.close();
} catch (IOException e) {
Log.e("tag", "Error", e);
}
}
}
然後,當我想知道該文件夾時,我可以將位圖大小與加載的大小進行比較。
InputStream bitmapStream = null;
try {
int bitmapId = R.drawable.icon;
bitmapStream = getResources().openRawResource(bitmapId);
int bitmapSize = bitmapStream.available();
String bitmapDir = resourceDirs.get(bitmapId).get(bitmapSize);
Log.i("tag", bitmapDir);
} catch (Exception e) {
Log.e("tag", "Error", e);
} finally {
if (bitmapStream != null) {
try {
bitmapStream.close();
} catch (IOException e) {
Log.e("tag", "Error", e);
}
}
}
嗯,這隻適用於圖像大小不同的情況。或者你可以比較其他東西,如寬度,高度等。
可能不是,你在找什麼,但至少它滿足了我的需求。
嗨,你有沒有找到正確的方法知道,哪個文件夾已被用於資源?或者你如何知道文件夾?我有同樣的問題。 – branoholy 2011-06-08 18:35:40
不,根據我所知,沒有辦法知道。 – 2011-06-09 12:03:24
@Iceman看到我的答案是一種獨立於大小的方式,只需要你有一組參考圖像(可以在不同的項目中重複使用)。 – ataulm 2012-12-06 12:44:08