2015-12-28 84 views
15

我想在图像加载到Imageview上时显示淡入淡出效果。我正在使用毕加索缓存图像并在图像视图中显示。我已经搜索了很多,但无法找到任何解决方案。在加载图像时淡入动画使用毕加索

我以前使用过,我知道他们有一些版本.fade(int持续时间)方法来加载时淡出图像,但我找不到此方法了。

这里是我现在

Picasso.with(context) 
       .load(viewHolder.data.imageList.get(0).url) 
       .networkPolicy(NetworkPolicy.OFFLINE) 
       .placeholder(R.drawable.a_place_holder_list_view) 
       .error(R.drawable.a_place_holder_list_view) 
       .into(viewHolder.ivUser, context.loadImage(viewHolder.ivUser, viewHolder.data.imageList.get(0).url)); 


public Callback loadImage(RoundedImageView ivUser, String url) { 
    return new callback(ivUser, url); 
} 

public class callback implements Callback { 

    RoundedImageView imageView; 
    String url; 

    public callback(RoundedImageView imageView, String url) { 
     this.imageView = imageView; 
     this.url = url; 
    } 

    @Override 
    public void onSuccess() { 

    } 

    @Override 
    public void onError() { 
     Picasso.with(BaseActivity.this) 
       .load(url) 
       .placeholder(R.drawable.a_place_holder_list_view) 
       .error(R.drawable.a_place_holder_list_view) 
       .into(imageView, new Callback() { 
        @Override 
        public void onSuccess() { 

        } 

        @Override 
        public void onError() { 
         Log.v("Picasso", "Could not fetch image"); 
        } 
       }); 
    } 
} 

做,请帮助我,我一直停留在这个相当长的时间。 在此先感谢。

+0

https://github.com/square/picasso/issues/743,看到JakeWharton答案在底部。使用回调。 – HourGlass

回答

12

引用杰克沃顿商学院的回答here

如果拍摄的图像从任何地方除了内存缓存褪色 应自动适用。

如果检查PicassoDrawable

boolean fade = loadedFrom != MEMORY && !noFade; 
if (fade) { 
    this.placeholder = placeholder; 
    animating = true; 
    startTimeMillis = SystemClock.uptimeMillis(); 
} 
. 
. 
. 
@Override public void draw(Canvas canvas) { 
if (!animating) { 
    super.draw(canvas); 
} else { 
. 
. 
. 

fade effect已应用于从N/W,而不是内存/缓存 和FADE_DURATION = 200f; //ms

要强制褪色,再次引用杰克沃顿商学院的加载图片回答here

您可以指定noFade(),然后始终播放加载回调的 中的动画。您还可以依靠名为 的回叫来同步确定是否需要播放动画。

final AtomicBoolean playAnimation = new AtomicBoolean(true); 
Picasso.with(context).load(..).into(imageView, new Callback() { 
    @Override public void onLoad() { 
    if (playAnimation.get()) { 
     //play fade 
     Animation fadeOut = new AlphaAnimation(0, 1); 
     fadeOut.setInterpolator(new AccelerateInterpolator()); 
     fadeOut.setDuration(1000); 
     imageView.startAnimation(fadeOut); 

     Animation fadeOutPlaceholder = new AlphaAnimation(1, 0); 
     fadeOutPlaceholder.setInterpolator(new AccelerateInterpolator()); 
     fadeOutPlaceholder.setDuration(1000); 
     placeHolderImageView.startAnimation(fadeOutPlaceholder); 
    } 
    } 
    //.. 
}); 
playAnimation.set(false); 
+0

你能帮我我的代码我是新的android – Android

+0

淡入淡出效果已应用于从n/w加载的图像。淡入时间为200ms。否则,如@Hourglass所述,指定noFade(),然后在载入图像的回调中播放动画。 – random

+0

我该怎么做 – Android

0

你可以简单地做

Picasso.with(context).load(url).fetch(new Callback(){ 
      @Override 
      public void onSuccess() { 
       imageView.setAlpha(0f); 
       Picasso.with(context).load(url).into(imageView); 
       imageView.animate().setDuration(300).alpha(1f).start(); 
      } 

      @Override 
      public void onError() { 

      } 
     });