পিকাসোতে অ্যানিমেটেড লোডিং চিত্র


105

পিকাসোতে একটি চিত্র লোড করার জন্য আমার কাছে নিম্নোক্ত কোড রয়েছে, চিত্রটি ডাউনলোডের সময় স্থানধারকটির জন্য একটি অঙ্কনযোগ্য ব্যবহার করে। আমি যা চাই তা হ'ল একটি অ্যানিমেটেড স্পিনিং প্রগ্রেস বার স্টাইলের স্পিনার যা চিত্রটি লোড হওয়ার সময় চারপাশে অ্যানিমেট করে, যেমন আমি বেশিরভাগ পেশাদার অ্যাপ্লিকেশনে দেখি। পিকাসো এটি সমর্থন করে বলে মনে হচ্ছে না, কেবল স্থির চিত্রের ছাঁটাইযোগ্য। এটি পিকাসোর সাথে কাজ করার কোনও উপায় আছে বা আমার কিছু আলাদা করতে হবে?

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

উত্তর:


252

পিকাসো স্থানধারক ব্যবহার করে কীভাবে লোডিং অগ্রগতি অ্যানিমেশন চিত্র থাকবে:

আমি এনিমেটেড-ঘোরানো এক্সএমএল অবজেক্টটি সহজেই এটি সমাধান করেছি।

পদক্ষেপ:

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>

পিকাসো লোড হচ্ছে:

Picasso.with( context )
        .load( your_path )
        .error( R.drawable.ic_error )
        .placeholder( R.drawable.progress_animation )
        .into( image_view );

32
@ ডিগ্রাজিওন এটি দুর্দান্ত কাজ করে তবে বড় চিত্রগুলির জন্য, এটি ব্যর্থ হয়। আমরা এর প্রস্থ এবং উচ্চতা 32x32 পিক্সেলের মতো সংখ্যায় স্থির করতে পারি?
m3hdi

9
এটি কাজ করে না, কোনও অ্যানিমেশন দেখানো হয়নি। কেবল একটি সরল চিত্র
জো মাহের

4
এটি কাজ করছে তবে আমি চাইছি ছোট লোডারটি আমার চিত্রদর্শন আকারের লোডার হিসাবে নয়
গণপত কালিয়া

2
দুর্দান্ত কাজ করা হয়েছে, ডাউনলোড হওয়া চিত্রটি প্রদর্শিত হওয়ার আগে অ্যানিমেশনটি কয়েক মিলিসেকেন্ড অবধি ছোট থাকে, এটি চিত্রটি প্রদর্শিত হওয়ার পরে কয়েক মিলি সেকেন্ডের জন্য সর্বাধিক আকারে এবং প্রসারিত হয়। কোন সমাধান আছে কি?
tinyCoder

2
এমডিপিআই, এইচডিপি,
এক্সএইচডিপি

73

আমি চিত্র ডাউনলোড এবং এটির খুব সহজ না হওয়া পর্যন্ত অগ্রগতি ডায়লগটি কার্যকর করেছি। আপনার ইমেজভিউটিকে আপেক্ষিক বিন্যাসে নিয়ে যান এবং একই চিত্রের ভিউতে অগ্রগতি লোডার রাখুন। নীচের কোডটি প্রয়োগ করুন এবং কেবলমাত্র অগ্রগতি ডায়ালগের দৃশ্যমানতা পরিচালনা করবেন।

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

                }
            });
        }

উপভোগ করুন। :)


ধন্যবাদ .. এটি আমাকে অনেক সাহায্য করেছে :)
জোহায়ার

2
গ্রেট! এখনও অবধি সেরা সমাধানটি বিভিন্ন প্রসঙ্গে ব্যবহার করা যেতে পারে। :)
ভিভিজেন

7
আসলে আপনার দুর্বল রেফারেন্সগুলিতে মনোযোগ দেওয়া উচিত এবং আবর্জনা সংগ্রহ এড়ানোর জন্য এইভাবে একটি কলব্যাক অবজেক্টটি ঘোষণা করা উচিত (অন্যথায় অনাকাঙ্ক্ষী কখনই কল করতে পারে না):final Callback loadedCallback = new Callback() { @Override public void onSuccess() { // your code } @Override public void onError() { // your code } }; imageView.setTag(loadedCallback); Picasso.with(context).load(url).into(imageView, loadedCallback);
ভিভিজেইন

যে কেউ লিঙ্গ দ্বারা বিভ্রান্ত, একটি অগ্রগতি লোডার একটি অগ্রগতি খারাপ
জো মেহের

2
আপনি রাউন্ডেড ট্রান্সফর্মেশন ক্লাস যুক্ত করতে মিস করেছেন। এই শ্রেণিটি এখানে gist.github.com/aprock/6213395
মোঃ সাজেদুল করিম

3

দুর্ভাগ্যক্রমে পিকাসো অ্যানিমেটেড স্থানধারীদের সমর্থন করে না।

এর চারপাশে কাজ করার একটি উপায় হ'ল নীচে অ্যানিমেটেড অঙ্কনীয় চিত্রের সাথে নিজের ইমেজভিউটিকে ফ্রেমলয়েটে রাখুন। এইভাবে পিকাসো যখন চিত্রটি লোড করে তখন এটি ব্যবহারকারীকে উদ্দেশ্যপ্রণালী প্রদান করে অ্যানিমেটেড স্থানধারকের শীর্ষে লোড হবে।

বিকল্পভাবে, আপনি লক্ষ্যটিকে ইমেজটি লোড করতে পারেন । তারপরে আপনার অগ্রগতি বারটি ডিফল্টরূপে প্রদর্শিত হবে এবং অনবিটম্যাপলয়েড পদ্ধতিটি যখন ডাকা হবে তখন আপনি এটি লুকিয়ে রাখতে এবং চিত্রটি প্রদর্শন করতে পারেন। আপনি এই একটি মৌলিক বাস্তবায়ন দেখতে পারেন এখানে


3
পিকাসো অ্যানিমেটেড স্থানধারকদের সমর্থন করে । আপনি অ্যানিমেশন অঙ্কনযোগ্য ফাইলটি লিখেছেন (অ্যানিমেশনটিতে প্রতিটি চিত্রের প্রতিনিধিত্বকারী বেশ কয়েকটি আইটেম সহ অ্যানিমেশন তালিকা অন্তর্ভুক্ত)। আপনি সেই ফাইলটিকে একটি নতুন অ্যানিমেশনড্র্যাবলযোগ্য বস্তুতে খাওয়ান এবং তারপরে এটি পিকাসো লোডার কনস্ট্রাক্টরে প্লেসহোল্ডার () এ পাস করুন।
ওডেম

1

নীচের মত ডিবিগ্রাজানের উত্তরে আকৃতির বৈশিষ্ট্য যুক্ত করুন এবং এটি মোহন মত কাজ করবে। শুভ কোডিং।

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

        <shape
            android:shape="rectangle">

            <size
                android:width="200dp"
                android:height="200dp"/>

            <solid
                android:color="#00FFFFFF"/>
        </shape>
    </item>

    <item android:gravity="center">
        <animated-rotate xmlns:android="http://schemas.android.com/apk/res/android"
            android:drawable="@drawable/spinner"
            android:pivotX="50%"
            android:pivotY="50%" />
    </item>
</layer-list>

আপনি গ্লাইডও ব্যবহার করতে পারেন:

Glide.with(activity).load(url)
                    .apply(RequestOptions.centerInsideTransform())
                    .placeholder(R.drawable.progress_animation)
                    .into(imageview);

1

আমি এই প্রশ্নের উত্তর খুঁজে পেয়েছি!

দেখুন: https://github.com/square/picasso/issues/427#issuecomment-266276253

@DBragion এর উত্তর ছাড়াও নীচে চেষ্টা করুন।

এখন আমরা উচ্চতা এবং প্রস্থ ঠিক করতে পারি!

image_view.scaleType = ImageView.ScaleType.CENTER_INSIDE
picasso.load(your_path)
        .fit()
        .centerCrop()
        .noFade()
        .placeholder(R.drawable. progress_animation)
        .into(image_view)

আমি মনে করি দুটি মূল পয়েন্ট আছে।

  1. NoFade () ব্যবহার করুন

  2. চিত্র_দর্শন এর স্কেল টাইপ "CENTER_INSIDE" এ সেট করুন


0

আমি নিম্নলিখিত পদ্ধতিতে এটি কাজ করেছিলাম:

  1. একটি অঙ্কনযোগ্য তৈরি করা হয়েছে (ইন্টারনেটে কোথাও পাওয়া যায়) এবং এটিকে পুনরায় / আঁকতে সক্ষম করে:

    <?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. গ্রিডভিউয়ের জন্য আমার আইটেমটিতে অগ্রগতি বার উপাদান যুক্ত হয়েছে:

    <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. অ্যাডাপ্টারে নিম্নলিখিত প্যারামিটারগুলির সাথে টার্গেট অবজেক্ট যুক্ত করা হয়েছে, যেখানে পোস্টার এবং স্পিনার ইমেজভিউ এবং প্রগতিবারের উল্লেখ রয়েছে:

    // ইমেজভিউতে প্রগতিবারকে দেখানোর / লুকানোর লক্ষ্য Tar

    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. ফলাফলগুলি লোডিংয়ের মতো হবে - বৃত্তটি ঘুরছে (এই স্ক্রিনশটের জন্য দুঃখিত, তবে চিত্রগুলি খুব দ্রুত প্রদর্শিত হচ্ছে): স্ক্রিনশট


0

যে কেউ ডিব্রেজিওনের কৌশলটি ব্যবহার করার চেষ্টা করছেন: আপনার কাছে পিকাসোর সর্বশেষতম সংস্করণ রয়েছে তা নিশ্চিত করুন নাহলে এটি স্পিন করবে না। আমি 2.5.2 সংস্করণ ব্যবহার না করা পর্যন্ত খনি কাজ করে না।

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

6
এটি উত্তরের উত্তরে একটি মন্তব্য হওয়া উচিত
ওজনোগওয়া জুড ওচালিফু

0

এই লিঙ্কে , জ্যাক ওয়ার্টন বলেছেন:

নাঃ। আমরা সমস্ত চিত্র ডিকোডিংয়ের জন্য অ্যান্ড্রয়েড বিটম্যাপফ্যাক্টরি ব্যবহার করি এবং এর কোনও অ্যানিমেটেড জিআইএফ সমর্থন নেই (দুঃখের সাথে)।

তাহলে আপনি পারবেন না


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.