android - पिकासो में एनिमेटेड लोडिंग छवि




picasso (4)

डीब्रागियन की तकनीक का उपयोग करने की कोशिश करने वाले किसी भी व्यक्ति के लिए: सुनिश्चित करें कि आपके पास पिकासो का नवीनतम संस्करण है या नहीं तो यह स्पिन नहीं होगा। जब तक मैं संस्करण 2.5.2 का उपयोग नहीं करता तब तक मेरा काम नहीं करता था।

compile 'com.squareup.picasso:picasso:2.5.2'

मेरे पास पिकासो में एक छवि लोड करने के लिए निम्न कोड है, प्लेसहोल्डर को चित्र डाउनलोड करने के दौरान प्रदर्शित करने के लिए एक ड्रायबल का उपयोग करके। मैं जो चाहता हूं वह एक एनिमेटेड कताई प्रगति बार शैली स्पिनर है जो छवि लोड होने के दौरान चारों ओर एनिमेट करता है, जैसा कि मैं सबसे अधिक पेशेवर ऐप्स में देखता हूं। पिकासो इस बात का समर्थन नहीं कर रहा है, केवल स्थैतिक छवि drawables। क्या पिकासो के साथ काम करने का कोई तरीका है या क्या मुझे कुछ अलग करना है?

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

पिकासो दुर्भाग्य से एनिमेटेड प्लेसहोल्डर का समर्थन नहीं करता है।

एक तरीका यह है कि आप इसके आसपास काम कर सकते हैं अपने ImageView को फ्रेमलेआउट में नीचे एनिमेटेड ड्रायबल के साथ रखना है। इस तरह जब पिकासो छवि लोड करता है तो यह एनिमेटेड प्लेसहोल्डर के शीर्ष पर लोड होगा, जिससे उपयोगकर्ता को इच्छित प्रभाव दिया जा सकेगा।

वैकल्पिक रूप से, आप छवि को Target में लोड कर Target । फिर आपके पास डिफ़ॉल्ट रूप से प्रगति पट्टी दिखाई देगी, और जब ऑनबिटमैपलोडेड विधि कहा जाता है तो आप इसे छुपा सकते हैं और छवि प्रदर्शित कर सकते हैं। आप here इसका मूल कार्यान्वयन देख सकते हैं


मैंने इसे निम्नलिखित तरीके से काम किया:

  1. एक ड्रॉबल बनाया गया (इंटरनेट पर कहीं भी मिला) और इसे res / drawable में डाल दिया:

    <?xml version="1.0" encoding="utf-8"?>
    <rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromDegrees="90"
    android:pivotX="50%"
    android:pivotY="50%"
    android:toDegrees="360">
    
    <shape
        android:innerRadiusRatio="3"
        android:shape="ring"
        android:thicknessRatio="7.0">
    
        <gradient
            android:angle="0"
            android:centerColor="#007DD6"
            android:endColor="#007DD6"
            android:startColor="#007DD6"
            android:type="sweep"
            android:useLevel="false" />
    </shape>
    

  2. GridView के लिए मेरे आइटम में प्रोग्रेसबार तत्व जोड़ा गया:

    <ProgressBar
        android:id="@+id/movie_item_spinner"
        android:layout_width="@dimen/poster_width"
        android:layout_height="@dimen/poster_height"
        android:progressDrawable="@drawable/circular_progress_bar"/>
    
  3. एडाप्टर में निम्नलिखित पैरामीटर के साथ लक्षित ऑब्जेक्ट जोड़ा गया, जहां पोस्टर और स्पिनर ImageView और प्रोग्रेसबार के संदर्भ हैं:

    // ImageView पर प्रोग्रेसबार दिखाने / छुपाने के लिए लक्ष्य

    final Target target = new Target() {
    
            @Override
            public void onPrepareLoad(Drawable drawable) {
                poster.setBackgroundResource(R.color.white);
                spinner.setVisibility(View.VISIBLE);
            }
    
            @Override
            public void onBitmapLoaded(Bitmap photo, Picasso.LoadedFrom from) {
                poster.setBackgroundDrawable(new BitmapDrawable(photo));
                spinner.setVisibility(View.GONE);
            }
    
            @Override
            public void onBitmapFailed(Drawable drawable) {
                poster.setBackgroundResource(R.color.white);
            }
        };
    
  4. परिणाम लोड होने पर ऐसा होंगे - सर्कल घूर्णन कर रहा है (इस स्क्रीनशॉट के लिए खेद है, लेकिन छवियां बहुत तेजी से दिखाई दे रही हैं): ScreenShot


मैंने छवि डाउनलोड तक प्रगति संवाद लागू किया और यह बहुत आसान है। अपने 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

                }
            });
        }

का आनंद लें। :)







picasso