#java #android #gif #animated-gif
#java #Android #gif #анимированный-gif
Вопрос:
В моем приложении для Android я получаю массив байтов с сервера и должен преобразовать их в изображение .gif, а затем поместить его в представление. Я уже знаю, как преобразовать их в неподвижное изображение с помощью BitmapFactory, но изображения всегда получаются неподвижными. Я использую gif-drawable в качестве своего вида контейнера для изображения .gif. Я протестировал его с локальным анимированным GIF, и он отлично работает. Как я могу поместить массив байтов в формат, доступный для рисования в формате gif?
в макете у меня есть это:
<pl.droidsonroids.gif.GifImageView
android:id="@ id/imgExerciseImage"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:contentDescription="exercise image" />
это представление, похожее на ImageView, которое может отображать анимированные GIF-файлы
Я хочу отобразить в нем изображение, которое я получаю с моего сервера firebase. это код:
imageRef.getBytes(DatabaseConstants.ONE_MEGABYTE * 3).addOnSuccessListener(new OnSuccessListener<byte[]>() {
@Override
public void onSuccess(byte[] bytes) {
Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
imgExerciseImage.setImageBitmap(bitmap);
progressDialog.dismiss();
}
}
байт[] — это анимированный GIF-файл. но для того, чтобы представить это в моем представлении, я должен использовать byte[] для формирования изображения. в этом примере я использую BitmapFactory для создания растрового изображения. как я могу создать gif вместо растрового изображения?
Комментарии:
1. Почему бы не преобразовать входной поток в изображение? Для этого есть обширная поддержка. Нет необходимости самостоятельно переводить все в массив байтов.
2. Потому что я использую firebase и не могу получить ничего, кроме массива байтов
3. Что де вы имеете в виду под этим? Вы получите поток байтов. Это не массив байтов. Вам решать, что вы будете делать с байтами. Если вы поместите их в массив, да, тогда у вас будет массив байтов.
4. Далее неясно, что будут представлять байты. Что они содержат, если вам нужно преобразовать их в gif? А jpg? А png? А bmp? Разве это уже не GIF-изображение?
5. Чтобы использовать firebase, вы используете функцию для считывания информации с сервера, а затем получаете данные в обратном вызове, который имеет параметр массива байтов. У меня нет никакого взаимодействия с inputstream
Ответ №1:
похоже, что gif-drawable поставляется с объектом GifDrawable, который может получать массив байтов в своем конструкторе для создания анимированного gif, который затем можно поместить в GifImageView
try {
GifDrawable gif = new GifDrawable(bytes);
imgExerciseImage.setImageDrawable(gif);
} catch (IOException e) {
e.printStackTrace();
}