Я использовал то же изображение с 9 патчами в папке с возможностью рисования, где оно работало нормально, но когда я сохранил его во внутренней памяти, оно воспринималось как обычное изображение с черными линиями (инструмента с 9 патчами), показанными на изображении.
public static Drawable getImageDrawable(Context context, String themeName, String imageName) {
File themeDir = new File(context.getFilesDir(), THEME_DIR);
File themeSubDir = new File(themeDir, themeName);
if (themeSubDir.exists() && themeSubDir.isDirectory()) {
File imageFile = new File(themeSubDir, imageName);
if (imageFile.exists() && imageFile.isFile()) {
if (imageName.endsWith(".9.png")) {
return getNinePatchDrawable(context, imageFile);
} else {
return Drawable.createFromPath(imageFile.getAbsolutePath());
}
}
}
return null; // Return null if the file does not exist
}
private static Drawable getNinePatchDrawable(Context context, File imageFile) {
try {
FileInputStream fis = new FileInputStream(imageFile);
Bitmap bitmap = BitmapFactory.decodeStream(fis);
if (bitmap != null) {
byte[] chunk = bitmap.getNinePatchChunk();
if (chunk != null) {
String chunkData = new String(chunk, StandardCharsets.UTF_8);
Log.d("TAG", "Chunk data: " + chunkData);
}
if (NinePatch.isNinePatchChunk(chunk)) {
Rect padding = new Rect();
NinePatchDrawable ninePatchDrawable = new NinePatchDrawable(context.getResources(), bitmap, chunk, padding, null);
return ninePatchDrawable;
} else {
Log.e("CheckPoint1", "The chunk is not a valid nine-patch chunk: " + imageFile.getAbsolutePath());
}
} else {
Log.e("CheckPoint2", "Bitmap could not be decoded: " + imageFile.getAbsolutePath());
}
} catch (Exception e) {
Log.e("CheckPoint3", "Error reading image file: " + imageFile.getAbsolutePath(), e);
}
return null;
}
в случае изображений с 9 патчами он всегда заканчивается на checkPoint1, я пробовал много изображений. когда я использую класс drawable, он показывает изображение, но область содержимого и растяжения работает как обычное изображение, но когда я сохранил эти изображения в папке с возможностью рисования, чтобы проверить, является ли изображение неисправным, я получил все изображения в порядке. я получил нулевые данные фрагмента при извлечении из внутреннего хранилища, но из доступных для рисования он также содержит значение.
Я использовал то же изображение с 9 патчами в папке с возможностью рисования, где оно работало нормально, но когда я сохранил его во внутренней памяти, оно воспринималось как обычное изображение с черными линиями (инструмента с 9 патчами), показанными на изображении. [code]public static Drawable getImageDrawable(Context context, String themeName, String imageName) { File themeDir = new File(context.getFilesDir(), THEME_DIR); File themeSubDir = new File(themeDir, themeName); if (themeSubDir.exists() && themeSubDir.isDirectory()) { File imageFile = new File(themeSubDir, imageName); if (imageFile.exists() && imageFile.isFile()) { if (imageName.endsWith(".9.png")) { return getNinePatchDrawable(context, imageFile); } else { return Drawable.createFromPath(imageFile.getAbsolutePath()); } } } return null; // Return null if the file does not exist } private static Drawable getNinePatchDrawable(Context context, File imageFile) { try { FileInputStream fis = new FileInputStream(imageFile); Bitmap bitmap = BitmapFactory.decodeStream(fis);
if (bitmap != null) {
byte[] chunk = bitmap.getNinePatchChunk(); if (chunk != null) { String chunkData = new String(chunk, StandardCharsets.UTF_8); Log.d("TAG", "Chunk data: " + chunkData); } if (NinePatch.isNinePatchChunk(chunk)) { Rect padding = new Rect(); NinePatchDrawable ninePatchDrawable = new NinePatchDrawable(context.getResources(), bitmap, chunk, padding, null); return ninePatchDrawable; } else { Log.e("CheckPoint1", "The chunk is not a valid nine-patch chunk: " + imageFile.getAbsolutePath()); } } else { Log.e("CheckPoint2", "Bitmap could not be decoded: " + imageFile.getAbsolutePath()); } } catch (Exception e) { Log.e("CheckPoint3", "Error reading image file: " + imageFile.getAbsolutePath(), e); } return null; } [/code] в случае изображений с 9 патчами он всегда заканчивается на checkPoint1, я пробовал много изображений. когда я использую класс drawable, он показывает изображение, но область содержимого и растяжения работает как обычное изображение, но когда я сохранил эти изображения в папке с возможностью рисования, чтобы проверить, является ли изображение неисправным, я получил все изображения в порядке. я получил нулевые данные фрагмента при извлечении из внутреннего хранилища, но из доступных для рисования он также содержит значение.