2015-12-28 14 views
15

का उपयोग कर छवि लोड करते समय एनीमेशन में फीका I Imageview पर छवि लोड होने पर एक फीका प्रभाव दिखाना चाहता हूं। मैं छवि कैश करने और छवि दृश्य में प्रदर्शित करने के लिए पिकासो का उपयोग कर रहा हूं। मैंने इसके लिए बहुत कुछ खोजा है लेकिन कोई समाधान नहीं मिला।पिकासो

मैंने पहले इस्तेमाल किया था और मुझे कुछ संस्करण में पता था। लोड करने के दौरान छवि को फीका करने के लिए फीड (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 पहले से ही एन से/डब्ल्यू और नहीं स्मृति/कैश और 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

+0

पर नया हूं, फीड प्रभाव पहले से ही एन/डब्ल्यू से लोड की गई छवियों पर लागू होता है। फीड अवधि 200 मिमी है। अन्यथा @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() { 

      } 
     }); 
संबंधित मुद्दे