Picasso中的动画加载图片

116

我有以下代码用于在Picasso中加载图像,使用drawable作为占位符在下载图像时显示。但是我想要的是一个旋转的进度条样式的spinner,在图像加载时循环播放动画,就像我在大多数专业应用程序中看到的那样。Picasso似乎不支持这一点,只支持静态图像drawable。是否有办法在Picasso中实现此功能,或者我必须采取不同的方法?

Picasso.with(context).load(url)             
                    .placeholder(R.drawable.loading)
                    .error(R.drawable.image_download_error)
                    .into(view);
12个回答

0
对于任何试图使用DBragion的技术的人:确保你有最新版本的Picasso,否则它不会旋转。我的在我使用2.5.2版本之前都没有工作。
compile 'com.squareup.picasso:picasso:2.5.2'

7
这应该是在所述答案下的评论。 - Ojonugwa Jude Ochalifu

0

@DBragion的回答非常好。问题在于它(就像评论中提到的许多问题一样)没有提供指定进度指示器高度/宽度的方法。以下是他的回答与@AkankshaRathod的回答结合修改后的版本。

loading_indicator.png

Loading Indicator Image

progress_animation.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:gravity="center">
        <animated-rotate
            android:drawable="@drawable/loading_indicator"
            android:pivotX="50%"
            android:pivotY="50%" />
    </item>
</layer-list>

CardView(或任何容器布局)包含您的ImageView

<androidx.cardview.widget.CardView
    android:id="@+id/vCategoryItem"
    android:layout_width="wrap_content"
    android:layout_height="@dimen/height_category_image"
    android:layout_marginLeft="@dimen/smaller"
    app:cardCornerRadius="@dimen/small">

    <ImageView
        android:id="@+id/imgCategoryImage"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:adjustViewBounds="true"
        android:scaleType="centerCrop"
        android:src="@drawable/demo" />

    <ImageView
        android:id="@+id/loadingIndicator"
        android:layout_width="32dp"
        android:layout_height="32dp"
        android:layout_gravity="center"
        android:layout_centerInParent="true"
        android:src="@drawable/progress_animation" />

    <TextView
        android:id="@+id/lblCategoryName"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_gravity="bottom"
        android:layout_marginBottom="@dimen/big"
        android:ellipsize="marquee"
        android:gravity="center"
        android:paddingLeft="@dimen/big"
        android:paddingRight="@dimen/big"
        android:singleLine="true"
        android:text="Category Name"
        android:textColor="@android:color/white"
        android:textSize="15sp"
        android:textStyle="bold" />

</androidx.cardview.widget.CardView>

Picasso 加载中:

Picasso.get().load(yourImageURL).into(imgCategoryImage, new Callback() {
    @Override
    public void onSuccess() {
        loadingIndicator.setVisibility(View.GONE);
    }

    @Override
    public void onError(Exception e) {

    }
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接