Android: показать символ загрузки в сети ImageView
Я использую NetworkImageView из библиотеки Volley для загрузки изображений.
Но в то время как изображение требует временной загрузки с URL-адреса, я хочу показать вращающийся / движущийся символ загрузки в контейнере изображения.
Я попытался использовать функцию setDefaultImageResId(), чтобы установить изображение loader.gif. Но я думаю, что формат GIF не поддерживается в Android изначально.
Пожалуйста посоветуй. Благодарю.
3 ответа
Вам просто нужно поставить NetworkImageView
и ProgressBar
внутри FrameLayout
или RelativeLayout
,что-то вроде этого
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<ProgressBar
style="?android:attr/progressBarStyle"
android:layout_width="..."
android:layout_height="..." />
<com.android.volley.toolbox.NetworkImageView
android:layout_width="..."
android:layout_height="..."
/>
</FrameLayout>
помните, что ЗАКАЗАТЬ СЧЕТЫ, убедитесь, что вы поставили NetworkImageView
после ProgressBar
таким образом NetworkImageView
остается на вершине ProgressBar
после загрузки изображения.
Надеюсь, поможет!
Ты прав. Анимированные картинки не поддерживаются в Android. Но хорошая новость заключается в том, что вы можете использовать встроенный индикатор выполнения / колесо. Читайте об этом здесь.
Вам придется переключить NetworkImageView
вы использовали с обычным ImageView
и загрузите ваше изображение, используя ImageLoader
, Таким образом, вы можете реализовать слушателя, чтобы отключить колесо прогресса. Это означает, что вам нужно создать RequestQueue
и ImageLoader
, Я советую вам создать один из них и поделиться им через одноэлементный класс с тем, кому это нужно в вашем коде.
Загрузка изображения должна выглядеть примерно так:
// ** code in init the progress wheel **
imageLoader.get(url, new ImageListener() {
@Override
public void onResponse(ImageContainer response, boolean isImmediate) {
if (response != null) {
Bitmap bitmap = response.getBitmap();
if (bitmap != null) {
// ** code to turn off the progress wheel **
// ** code to use the bitmap in your imageview **
}
@Override
public void onErrorResponse(VolleyError error) {
// ** code to handle errors **
}
});
Я сделал это с помощью анимации Drawable. Вот шаги:
Animate drawable ic_sync_drawable.xml:
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/selected"
android:oneshot="false">
<item
android:drawable="@drawable/ic_popup_sync_1"
android:duration="50" />
<item
android:drawable="@drawable/ic_popup_sync_2"
android:duration="50" />
<item
android:drawable="@drawable/ic_popup_sync_3"
android:duration="50" />
<item
android:drawable="@drawable/ic_popup_sync_4"
android:duration="50" />
<item
android:drawable="@drawable/ic_popup_sync_5"
android:duration="50" />
<item
android:drawable="@drawable/ic_popup_sync_6"
android:duration="50" />
</animation-list>
Теперь в коде Java я использую ImageView:
Drawable drawable = getContext().getResources().getDrawable(R.drawable.ic_sync_drawable);
ImageView imageView = new ImageView(getContext());
imageView.setImageDrawable(drawable);
imageLoader.get(imageurl, ImageLoader.getImageListener(imageView, 0, 0));
ViewFlipper.addView(imageView);
//start animation
AnimationDrawable frameAnimation = (AnimationDrawable) drawable;
frameAnimation.start();