У меня есть ряд проблем, все они связаны между собой.Некоторые из них я решил, но решение, которое я нашел, может остановить меня от конечного продукта.Я упомяну все проблемы и решения здесь, так как я уверен, что это будет довольно распространенной проблемой, с которой столкнется множество людей.
Окончательный результат У меня есть базовое изображение, которое имеет 3 слоя (прозрачные png) наверху.слои, которые отображаются на усмотрение пользователя.Каждый слой добавляет больше информации к базовому изображению.В моей ситуации базовое изображение - это изображение звезд.Когда пользователь добавляет дополнительные слои, он может видеть границы созвездия, имена звезд и сетку.Пользователь также должен иметь возможность увеличивать область для более четкого изображения участка неба.
Первая проблема Размеры изображения - два больших (1324 × 1872), вызывающих ошибку OutOfMemory.
Решено путем масштабирования изображения с использованием
/**
* This method scales an image in the assets directory and returns a
* BitmapDrawable object that can be passed to an images setImageBitmap or a
* views setBackgroundDrawable by passing this method into the constructor
* of BitmapDrawable.
* eg ViewGroup.setBackgroundDrawable(
* new BitmapDrawable(getScaledBitMap(this, imagePath, 2)));
*
* @param context
* @param imgFullPath
* @param imageSize
* @return
* @throws IOException
*/
public static Bitmap getScaledBitMap(Context context, String imgFullPath,
int imageSize) throws IOException
{
InputStream instream;
instream = context.getAssets().open(imgFullPath);
BitmapFactory.Options options=new BitmapFactory.Options();
options.inSampleSize = imageSize;
Bitmap bitmap=BitmapFactory.decodeStream(instream, null, options);
return bitmap;
}
Хотя этот код помог, я все равно получаю ошибку OutOfMemory при загрузке 3 слоев.Я также думаю, что масштабирование изображения будет проблемой при масштабировании, поскольку качество было снижено.
Вторая проблема.Насколько я обнаружил, вы не можете слой png, где одно из изображений не является прозрачным.Прозрачные изображения не будут отображаться, показывая только то, что не является прозрачным (базовое изображение).
Решено, установив фон FrameLayout для базового изображения и оставив только 3 слоя дочерними для этого макета.
Третий выпуск Увеличение изображения.Я нашел, что может быть решением здесь Как я могу получить функцию масштабирования для изображений? , но еще не тестировал его, поскольку эмулятор не поддерживает мультитач, и моему устройству не понравилось, когдаЯ взял это для плавания.В настоящее время у меня нет других устройств для тестирования.
Каков наилучший способ загрузки всех 4 изображений (базовый + 3 слоя) без получения ошибки outOfMemoryError и с возможностью масштабирования изображений.
Я создал проект с необходимым кодом здесь