在毕加索的动画加载图像

NZJ*_*mes 104 android picasso

我有以下代码在Picasso中加载图像,使用drawable在占用图像下载时显示占位符.我想要的是一个动画旋转进度条样式微调器,在图像加载时围绕和周围动画,就像我在大多数专业应用程序中看到的那样.毕加索似乎不支持这一点,只有静态图像可绘制.有没有办法让它与毕加索合作,还是我必须做一些与众不同的事情?

Picasso.with(context).load(url)             
                    .placeholder(R.drawable.loading)
                    .error(R.drawable.image_download_error)
                    .into(view);
Run Code Online (Sandbox Code Playgroud)

DBr*_*ion 243

如何使用Picasso占位符获取加载进度动画图像:

我使用动画旋转xml对象轻松解决了这个问题.

脚步:

progress_image.png

progress_image.png

/res/drawable/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 xmlns:android="http://schemas.android.com/apk/res/android"
        android:drawable="@drawable/progress_image"
        android:pivotX="50%"
        android:pivotY="50%" />
    </item>
</layer-list>
Run Code Online (Sandbox Code Playgroud)

毕加索装载:

Picasso.with( context )
        .load( your_path )
        .error( R.drawable.ic_error )
        .placeholder( R.drawable.progress_animation )
        .into( image_view );
Run Code Online (Sandbox Code Playgroud)

  • @DBragion它工作得很好但是对于大型图像,它会变得很糟糕.我们可以将它的宽度和高度固定为32x32像素的数字吗? (31认同)
  • 这不起作用,没有显示动画.只是一个普通的图像 (6认同)
  • 它工作但我想小型装载机不是我的imageview大小装载机 (3认同)
  • 工作正常,动画保持很小,直到下载的图像出现前几毫秒,它被最大化并拉伸几毫秒然后图像出现.有什么解决方案吗? (2认同)
  • 使用http://romannurik.github.io/AndroidAssetStudio/index.html(选择"启动器图标生成器")创建mdpi,hdpi,xhdpi等. (2认同)

Aka*_*ore 68

我实现了进度对话框,直到图像下载,非常简单.将ImageView放在相对布局中,并将进度加载器放在同一图像视图上.应用以下代码并仅处理进度对话框可见性.

holder.loader.setVisibility(View.VISIBLE);
            holder.imageView.setVisibility(View.VISIBLE);
         final ProgressBar progressView = holder.loader;
            Picasso.with(context)
            .load(image_url)
            .transform(new RoundedTransformation(15, 0))
            .fit()
            .into(holder.imageView, new Callback() {
                @Override
                public void onSuccess() {
                    progressView.setVisibility(View.GONE);
                }

                @Override
                public void onError() {
                    // TODO Auto-generated method stub

                }
            });
        }
Run Code Online (Sandbox Code Playgroud)

请享用.:)

  • 实际上你应该注意弱引用并以这种方式声明**回调对象**以避免垃圾收集**(否则onSuccess永远不会被调用):`final Callback loadedCallback = new Callback(){@覆盖public void onSuccess(){//您的代码} @Override public void onError(){// your code}}; imageView.setTag(loadedCallback); Picasso.with(context).load(url).into(imageView,loadedCallback);` (7认同)
  • 大!到目前为止,最佳解决方案可用于许多不同的环境.:) (2认同)
  • 您错过了添加RoundedTransformation类.这个课程在这里https://gist.github.com/aprock/6213395 (2认同)

Mic*_*ael 5

不幸的是,毕加索不支持动画占位符。

解决这个问题的一种方法是将 ImageView 放置在 FrameLayout 中,并在下面放置动画可绘制对象。这样,当毕加索加载图像时,它将加载到动画占位符的顶部,为用户提供预期的效果。

或者,您可以将图像加载到Target中。然后,默认情况下会显示进度条,并且当​​调用 onBitmapLoaded 方法时,您可以隐藏它并显示图像。你可以在这里看到这个的基本实现

  • 毕加索*确实*支持动画占位符。您编写动画可绘制文件(包括动画列表,其中包含代表动画中每个图像的多个项目)。您将该文件提供给新的 AnimationDrawable 对象,然后将其传递给 Picasso 加载器构造函数中的 placeHolder()。 (3认同)