কীভাবে পুনর্ব্যবহারযোগ্য আইটেমগুলি প্রদর্শিত হয় তা প্রাণবন্ত করতে হবে


237

আমি যখন পুনর্ব্যবহারযোগ্য আইটেমগুলি উপস্থিত হব তখন কীভাবে সঞ্চার করতে পারি?

পুনর্ব্যবহারযোগ্য ডেটা সেট করার পরে কোনও ডেটা যুক্ত বা সরিয়ে ফেলা হলে ডিফল্ট আইটেম অ্যানিমেটার কেবলমাত্র অ্যানিমেটর থাকে। আমি নতুন বিকাশকারী অ্যাপ্লিকেশন এবং কোথা থেকে শুরু করতে হবে তার কোনও ক্লু নেই।

কোন ধারণা কিভাবে এটি অর্জন?

উত্তর:


42

কেবল এক্সএমএল দিয়ে সাধারণ তৈরি

গিস্ট লিঙ্ক দেখুন

মাঝামাঝি / anim / layout_animation.xml

<?xml version="1.0" encoding="utf-8"?>
    <layoutAnimation xmlns:android="http://schemas.android.com/apk/res/android"
        android:animation="@anim/item_animation_fall_down"
        android:animationOrder="normal"
        android:delay="15%" />

মাঝামাঝি / anim / item_animation_fall_down.xml

<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="500">

    <translate
        android:fromYDelta="-20%"
        android:toYDelta="0"
        android:interpolator="@android:anim/decelerate_interpolator"
        />

    <alpha
        android:fromAlpha="0"
        android:toAlpha="1"
        android:interpolator="@android:anim/decelerate_interpolator"
        />

    <scale
        android:fromXScale="105%"
        android:fromYScale="105%"
        android:toXScale="100%"
        android:toYScale="100%"
        android:pivotX="50%"
        android:pivotY="50%"
        android:interpolator="@android:anim/decelerate_interpolator"
        />

</set>

লেআউট এবং পুনর্ব্যবহারযোগ্য মত ব্যবহার করুন:

<android.support.v7.widget.RecyclerView
                android:id="@+id/recycler_view"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layoutAnimation="@anim/layout_animation"
                app:layout_behavior="@string/appbar_scrolling_view_behavior" />

1
অ্যানিমেশন ফাইল পরিবর্তন করে @ আর্নল্ডব্রাউন পড়ুন: stackoverflow.com/questions/5151591/...
iamnaran

এটি এখন পর্যন্ত সবচেয়ে ব্যবহারিক উত্তর।
অলিভার মেটজ

তালিকাটি খোলার সাথে সাথে এই কাজটি কীভাবে করা যায়, কারণ এখন এটি কেবল প্রথমবারের মতো করে।
হিওয়া জালাল

7
recyclerView.scheduleLayoutAnimation()ডেটা সেট পরিবর্তনের পরে আপনাকে কল করতে হবে , যদি না হয় তবে অ্যানিমেশনটি কাজ করবে না।
জেলেভেন

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

315

সম্পাদনা:

মতে ItemAnimator ডকুমেন্টেশন :

এই শ্রেণিটি অ্যাডাপ্টারে পরিবর্তন হিসাবে আইটেমগুলিতে ঘটে যাওয়া অ্যানিমেশনগুলি সংজ্ঞায়িত করে।

সুতরাং আপনি যদি নিজের আইটেমগুলিকে এক এক করে যোগ না করেন RecyclerViewএবং প্রতিটি পুনরাবৃত্তিতে ভিউটি রিফ্রেশ না করেন তবে আমার মনে হয় নাItemAnimator এটি আপনার প্রয়োজনের সমাধান।

RecyclerViewকাস্টমএডাপ্টার ব্যবহার করে আইটেমগুলি প্রদর্শিত হবে তা এখানে আপনি কীভাবে চলাচল করতে পারেন:

public class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.ViewHolder>
{
    private Context context;

    // The items to display in your RecyclerView
    private ArrayList<String> items;
    // Allows to remember the last item shown on screen
    private int lastPosition = -1;

    public static class ViewHolder extends RecyclerView.ViewHolder
    {
        TextView text;
        // You need to retrieve the container (ie the root ViewGroup from your custom_item_layout)
        // It's the view that will be animated
        FrameLayout container;

        public ViewHolder(View itemView)
        {
            super(itemView);
            container = (FrameLayout) itemView.findViewById(R.id.item_layout_container);
            text = (TextView) itemView.findViewById(R.id.item_layout_text);
        }
    }

    public CustomAdapter(ArrayList<String> items, Context context)
    {
        this.items = items;
        this.context = context;
    }

    @Override
    public CustomAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType)
    {
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.custom_item_layout, parent, false);
        return new ViewHolder(v);
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position)
    {
        holder.text.setText(items.get(position));

        // Here you apply the animation when the view is bound
        setAnimation(holder.itemView, position);
    }

    /**
     * Here is the key method to apply the animation
     */
    private void setAnimation(View viewToAnimate, int position)
    {
        // If the bound view wasn't previously displayed on screen, it's animated
        if (position > lastPosition)
        {
            Animation animation = AnimationUtils.loadAnimation(context, android.R.anim.slide_in_left);
            viewToAnimate.startAnimation(animation);
            lastPosition = position;
        }
    }
}

এবং আপনার কাস্টম_তেম_সামগ্রীটি দেখতে এমন দেখাচ্ছে:

<FrameLayout
    android:id="@+id/item_layout_container"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <TextView
        android:id="@+id/item_layout_text"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceListItemSmall"
        android:gravity="center_vertical"
        android:minHeight="?android:attr/listPreferredItemHeightSmall"/>

</FrameLayout>

কাস্টমএডাপ্টারগুলি সম্পর্কে আরও তথ্যের জন্য এবং সরকারী ডকুমেন্টেশনেRecyclerView এই প্রশিক্ষণটি দেখুন

দ্রুত স্ক্রোলে সমস্যা

এই পদ্ধতিটি ব্যবহার করে দ্রুত স্ক্রোলিংয়ে সমস্যা হতে পারে। অ্যানিমেশনটি হওয়ার সময় দৃশ্যটি পুনরায় ব্যবহার করা যেতে পারে। এটি এড়ানোর জন্য অ্যানিমেশনটি আলাদা করার পরে সাফ করার পরামর্শ দেওয়া হয়।

    @Override
    public void onViewDetachedFromWindow(final RecyclerView.ViewHolder holder)
    {
        ((CustomViewHolder)holder).clearAnimation();
    }

কাস্টমভিউহোল্ডারটিতে:

    public void clearAnimation()
    {
        mRootLayout.clearAnimation();
    }

পুরানো উত্তর:

গ্যাব্রিয়েল মারিয়োটির রেপোটি একবার দেখুন , আমি নিশ্চিত যে আপনি যা প্রয়োজন তা পেয়ে যাবেন। তিনি রিসাইক্লারভিউয়ের জন্য স্লাইডআইনিআইটেমনিমেটর বা স্লাইডস্কেলআইটেমনিমেটরের মতো সাধারণ আইটেমনিমিটার সরবরাহ করেন provides


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

1
আমি যতদূর জানি, আপনার তখন কাস্টমএডাপ্টার ব্যবহার করা দরকার।
ম্যাথিউমারি

20
আমি ভাবছিলাম যে আপনি রিসাইক্লার ভিউতে এই অ্যানিমেশনগুলির সাথে "আটকে" প্রভাবটি সমাধান করেছেন এবং সম্ভবত সমাধান করেছেন? আমি তালিকাভিউয়ের জন্য সাদৃশ্য কোডটি ব্যবহার করেছি এবং আমার আইটেমগুলি যত তাড়াতাড়ি স্ক্রোল করা হোক না কেন সমস্যা ছাড়াই অ্যানিমেটেড হয়েছি, তবে আমি যদি দ্রুত স্ক্রোল করি তবে কিছুটা আইটেমগুলি অন্য আইটেমের উপরে স্ক্রিনে আটকে যায় এবং সেগুলি পুরোপুরি লুকায় না Rec - এটি এনিমেশনটি শেষ হওয়ার আগেই বন্ধ হয়ে যাওয়ার মতো। ক্ষেত্রগুলিকে জনবহুল করে এমন কোডের অংশটি আমি মন্তব্য করার চেষ্টা করেছি (অনবিন্দউহোল্ডার পদ্ধতির কার্যকরকরণের গতি বাড়ানোর চেষ্টা করছি) তাই আমি কেবল এনিমেটের কোড রেখেছি
টমিসালভ

4
@ ম্যাথিউমারি এই বিস্মিত অ্যানিমেশনের জন্য ধন্যবাদ slow এটি ধীর স্ক্রোলের জন্য ভাল দেখাচ্ছে তবে দ্রুত স্ক্রোল পুনর্ব্যবহারযোগ্য আইটেমগুলিতে ওভারল্যাপ করা হয়েছে you আপনি কি এই ইস্যুটি খুঁজে পেয়েছেন? এই সমস্যাটি অতিক্রম করার জন্য কোনও পরামর্শ?
গিরু ভাই

40
@GiruBhai ওভাররাইড onViewDetachedFromWindowএবং কল clearAnimationদৃশ্য উপর। সমস্যাটি হ'ল যখন রিসাইক্লারভিউ ভিউটি পুনরায় ব্যবহার করার চেষ্টা করছে তখন অ্যানিমেশনগুলি চলছে।
উদাহরণ 4

62

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

private final static int FADE_DURATION = 1000; //FADE_DURATION in milliseconds

@Override
public void onBindViewHolder(ViewHolder holder, int position) {

    holder.getTextView().setText("some text");

    // Set the view to fade in
    setFadeAnimation(holder.itemView);            
}

private void setFadeAnimation(View view) {
    AlphaAnimation anim = new AlphaAnimation(0.0f, 1.0f);
    anim.setDuration(FADE_DURATION);
    view.startAnimation(anim);
}

আপনি কোনও বিন্দু থেকে স্কেল করে আইটেমের উপস্থিতি সঞ্চার setFadeAnimation()করতে নিম্নলিখিতগুলির সাথে প্রতিস্থাপন করতে পারেন setScaleAnimation():

private void setScaleAnimation(View view) {
    ScaleAnimation anim = new ScaleAnimation(0.0f, 1.0f, 0.0f, 1.0f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
    anim.setDuration(FADE_DURATION);
    view.startAnimation(anim);
}

আপনি যখন RecyclerViewআইটেমগুলি সর্বদা বিবর্ণ বা স্কেল করেন তখন উপরের কোডটিতে কিছুটা ওয়ার্ট থাকে । আপনি যদি ইচ্ছে করেন যে কোডটি যুক্ত করতে পারবেন কেবল অ্যানিমেশনটি তখনই ঘটে যখন খণ্ডগুলি বা ক্রিয়াকলাপটি RecyclerViewতৈরি করা হয় যখন প্রথম তৈরি হয় (যেমন সিস্টেমটি তৈরির সময় পান এবং কেবল প্রথম FADE_DURATION মিলিসেকেন্ডের জন্য অ্যানিমেশনের অনুমতি দিন)।


1
আপনার উত্তরটির জন্য আমি কেবলমাত্র নীচে স্ক্রোলটিতে অ্যানিমেশনটির কাজ করতে সামান্য পরিবর্তন করেছি
বাশির আল-মোমনি

1
এটি দ্রুত এবং উপরে স্ক্রোলিংয়ের উপর লেআউটটি (অতিরিক্ত লিখিত তালিকার আইটেমগুলি, ভুল পাঠ্যের
রঙযুক্ত

পুনর্ব্যবহারযোগ্য আইটেমগুলিকে সঞ্চার করার জন্য এটি সঠিক বা প্রস্তাবিত উপায় নয়। আপনার অবশ্যই আইটেমএনিমেটার ক্লাসটি ব্যবহার করা উচিত
Eco4ndly

25

আমি সামান্য দিয়ে পিবিএম এর উত্তর থেকে অ্যানিমেশন তৈরি করেছি createdmodification aninmation রান শুধুমাত্র একবার করতে

অন্য কথায় Animation appear with you scroll down only

private int lastPosition = -1;

private void setAnimation(View viewToAnimate, int position) {
    // If the bound view wasn't previously displayed on screen, it's animated
    if (position > lastPosition) {
        ScaleAnimation anim = new ScaleAnimation(0.0f, 1.0f, 0.0f, 1.0f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
        anim.setDuration(new Random().nextInt(501));//to make duration random number between [0,501)
        viewToAnimate.startAnimation(anim);
        lastPosition = position;
    }
}

এবং onBindViewHolderফাংশন কল

@Override
public void onBindViewHolder(ViewHolder holder, int position) {

holder.getTextView().setText("some text");

// call Animation function
setAnimation(holder.itemView, position);            
}

1
এখানে সর্বশেষ পজিশনটি কী? এটি অ্যারেলিস্ট.সাইজ () - 1
সুমিত শুক্লা

1
lastPositionরেন্ডার করা ভিউগুলির সংখ্যা উপস্থাপন করে, সুতরাং এটির মানটি শুরু হয় -1, প্রতিবার নতুন ভিউ রেন্ডার করা হচ্ছে আমরা একটি অ্যানিমেশন শুরু করি এবং অবস্থানটি বাড়িয়ে
তুলি

15

আপনি এটি পছন্দ করতে একটি android:layoutAnimation="@anim/rv_item_animation"বৈশিষ্ট্য যুক্ত করতে RecyclerViewপারেন:

<android.support.v7.widget.RecyclerView
    android:layout_width="match_parent"
    android:layout_height="match_parent"                                        
    android:layoutAnimation="@anim/layout_animation_fall_down"
    />

এখানে চমৎকার নিবন্ধটির জন্য ধন্যবাদ: https://proandroiddev.com/enter-animation- using-recyclerview- এবং- layoutanimation-part-1- list-75a874a5d213


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

8

শুরু করার জন্য একটি ভাল জায়গা হ'ল: https://github.com/wasabeef/recyclerview-animators/blob/master/animators/src/main/java/jp/wasabeef/recyclerview/adapters/AnimationAdapter.java

এমনকি আপনার পুরো লাইব্রেরিও লাগবে না, এটি ক্লাসই যথেষ্ট। তারপরে আপনি যদি এইভাবে একটি অ্যানিম্যাটর প্রদান করে আপনার অ্যাডাপ্টারের ক্লাসটি কার্যকর করেন:

@Override
protected Animator[] getAnimators(View view) {
    return new Animator[]{
            ObjectAnimator.ofFloat(view, "translationY", view.getMeasuredHeight(), 0)
    };
}

@Override
public long getItemId(final int position) {
    return getWrappedAdapter().getItemId(position);
}

আপনি স্ক্রোল করার সময় নীচে থেকে উপস্থিত আইটেমগুলি দেখতে পাবেন, দ্রুত স্ক্রোলের সমস্যাটি এড়ানোও।


3

আইসেটিকে অ্যাডাপ্টারে বেঁধে রাখা হলে পুনর্ব্যবহারযোগ্য আইটেমগুলি অ্যানিমেটিং করা সেরা ধারণা নাও হতে পারে কারণ এটি পুনর্ব্যবহারযোগ্য আইটেমগুলিকে বিভিন্ন গতিতে অ্যানিমেট করতে পারে। আমার ক্ষেত্রে, পুনর্ব্যবহারযোগ্য পর্যালোচনা শেষে আইটেমটি দ্রুত তাদের অবস্থানের সাথে সঞ্চারিত করে তারপরে শীর্ষে থাকা ব্যক্তিদের হিসাবে শীর্ষে থাকা ব্যক্তিদের আরও ভ্রমণ করতে হবে যাতে এটি অস্বচ্ছ লাগায় look

আমি প্রতিটি আইটেমটিকে পুনর্ব্যবহারযোগ্যতে অ্যানিমেট করার জন্য যে মূল কোডটি ব্যবহার করেছি তা এখানে পাওয়া যাবে:

http://frogermcs.github.io/Instagram-with-Material-Design-concept-is-getting-real/

তবে লিঙ্কটি ভেঙে যাওয়ার পরে আমি কোডটি অনুলিপি করে আটকান।

পদক্ষেপ 1: এটি আপনার অনক্রিট পদ্ধতিতে সেট করুন যাতে আপনি নিশ্চিত হন যে অ্যানিমেশনটি কেবল একবার চালানো হয়েছে:

if (savedInstanceState == null) {
    pendingIntroAnimation = true;
}

পদক্ষেপ 2: আপনি অ্যানিমেশনটি শুরু করতে চান এমন পদ্ধতিতে আপনাকে এই কোডটি লাগাতে হবে:

if (pendingIntroAnimation) {
    pendingIntroAnimation = false;
    startIntroAnimation();
}

লিঙ্কটিতে, লেখক সরঞ্জামদণ্ডের আইকনগুলি অ্যানিমেট করছেন, তাই তিনি এটিকে এই পদ্ধতির ভিতরে রেখেছেন:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.menu_main, menu);
    inboxMenuItem = menu.findItem(R.id.action_inbox);
    inboxMenuItem.setActionView(R.layout.menu_item_view);
    if (pendingIntroAnimation) {
        pendingIntroAnimation = false;
        startIntroAnimation();
    }
    return true;
}

পদক্ষেপ 3: এখন সূচনাপ্রযুক্তি অ্যানিমেশন () এর জন্য যুক্তিটি লিখুন:

private static final int ANIM_DURATION_TOOLBAR = 300;

private void startIntroAnimation() {
    btnCreate.setTranslationY(2 * getResources().getDimensionPixelOffset(R.dimen.btn_fab_size));

    int actionbarSize = Utils.dpToPx(56);
    toolbar.setTranslationY(-actionbarSize);
    ivLogo.setTranslationY(-actionbarSize);
    inboxMenuItem.getActionView().setTranslationY(-actionbarSize);

    toolbar.animate()
            .translationY(0)
            .setDuration(ANIM_DURATION_TOOLBAR)
            .setStartDelay(300);
    ivLogo.animate()
            .translationY(0)
            .setDuration(ANIM_DURATION_TOOLBAR)
            .setStartDelay(400);
    inboxMenuItem.getActionView().animate()
            .translationY(0)
            .setDuration(ANIM_DURATION_TOOLBAR)
            .setStartDelay(500)
            .setListener(new AnimatorListenerAdapter() {
                @Override
                public void onAnimationEnd(Animator animation) {
                    startContentAnimation();
                }
            })
            .start();
}

আমার পছন্দসই বিকল্প:

আমি বরং পুনর্ব্যবহারযোগ্য ভিতরে থাকা আইটেমগুলির পরিবর্তে পুরো পুনর্ব্যবহারযোগ্য দৃশ্যটি অ্যানিমেট করব।

পদক্ষেপ 1 এবং 2 একই থাকে।

পদক্ষেপ 3 এ, আপনার এপিআই কলটি আপনার ডেটা সহ ফিরে আসার সাথে সাথে আমি অ্যানিমেশনটি শুরু করব।

private void startIntroAnimation() {
    recyclerview.setTranslationY(latestPostRecyclerview.getHeight());
    recyclerview.setAlpha(0f);
    recyclerview.animate()
            .translationY(0)
            .setDuration(400)
            .alpha(1f)
            .setInterpolator(new AccelerateDecelerateInterpolator())
            .start();
}

এটি আপনার সম্পূর্ণ পুনর্ব্যবহারযোগ্য চিত্রটি প্রাণবন্ত করে তুলবে যাতে এটি পর্দার নীচ থেকে উড়ে যায়।


আপনি পুরো পুনর্ব্যবহারযোগ্য
চিত্রটি

হ্যা আমি. আমার কেন পুরো রিসাইক্লারভিউটি অ্যানিমেট করা প্রতিটি আইটেমের চেয়ে ভাল ধারণা বলে আপনার প্রথম অনুচ্ছেদটি পড়া উচিত। আপনি প্রতিটি আইটেম অ্যানিমেট করার চেষ্টা করতে পারেন তবে এটি দেখতে ভাল লাগবে না।
সাইমন

কী latestPostRecyclerview?
আন্তোনিও

1
আপনি কি আমার উত্তরটির প্রথম অনুচ্ছেদটি পড়েছেন যেখানে আমি আইটেমের ভিউগুলি অ্যানিমেট করার জন্য এত দুর্দান্ত ধারণা না হওয়ার কারণটি বলেছিলাম? এছাড়াও আমি প্রস্তাবিত গ্রহণযোগ্য সমাধান চেষ্টা করে দেখুন এবং তারপরে আপনি সমস্যাটি বুঝতে পারেন, ফিরে এসে এই সমাধানটি চেষ্টা করুন।
সাইমন 18

3

আপনার পুনর্ব্যবহারযোগ্য অ্যাডাপ্টারে এই পদ্ধতিটি তৈরি করুন

private void setZoomInAnimation(View view) {
        Animation zoomIn = AnimationUtils.loadAnimation(context, R.anim.zoomin);// animation file 
        view.startAnimation(zoomIn);
    }

এবং অবশেষে অনবিন্দ ভিহোল্ডারে কোডের এই লাইনটি যুক্ত করুন

setZoomInAnimation(holder.itemView);


2

2019 সালে, আমি আইটেমএনিমেটরে সমস্ত আইটেম অ্যানিমেশনগুলি রাখার পরামর্শ দেব।

আসুন রিসাইক্লার-ভিউতে অ্যানিমেটার ঘোষণা দিয়ে শুরু করুন:

with(view.recycler_view) {
adapter = Adapter()
itemAnimator = CustomAnimator()
}

কাস্টম অ্যানিমেটারটি তখন ঘোষণা করুন,

class CustomAnimator() : DefaultItemAnimator() {

     override fun animateAppearance(
       holder: RecyclerView.ViewHolder,
       preInfo: ItemHolderInfo?,
       postInfo: ItemHolderInfo): Boolean{} // declare  what happens when a item appears on the recycler view

     override fun animatePersistence(
       holder: RecyclerView.ViewHolder,
       preInfo: ItemHolderInfo,
       postInfo: ItemHolderInfo): Boolean {} // declare animation for items that persist in a recycler view even when the items change

}

উপরোক্তগুলির অনুরূপ অন্তর্ধানের animateDisappearanceজন্য animateAdd, পরিবর্তনের জন্য animateChangeএবং স্থানান্তরিত করার জন্য একটি রয়েছে animateMove

একটি গুরুত্বপূর্ণ বিষয় হ'ল তাদের ভিতরে সঠিক অ্যানিমেশন-প্রেরণকারীদের কল করা।


আপনি এই ওভাররাইড ফাংশনটি ব্যবহার করে একটি কাস্টম উপস্থিতি অ্যানিমেশনের উদাহরণ সরবরাহ করতে পারেন? আমি একটি উদাহরণ খুঁজে পাই না এবং আমি নিশ্চিত না যে আমাকে কেবল ফাংশনে অ্যানিমেশন নির্দিষ্ট করতে হবে কিনা।
মিনার

1
gist.github.com/tadfisher/120d03f8380bfa8a16bf আমি এই তাত্ক্ষণিক অনুসন্ধানে অনলাইনে পেয়েছি, এটি ওভারলোডিং কীভাবে কাজ করে তার একটি ধারণা দেয়
দীনেশ

0

ঠিক নীচের মত আপনার অ্যাডাপ্টার প্রসারিত

public class RankingAdapter extends AnimatedRecyclerView<RankingAdapter.ViewHolder> 

এবং অনবিন্দ ভিহোল্ডার-এ সুপার পদ্ধতি যুক্ত করুন

@Override
    public void onBindViewHolder(ViewHolder holder, final int position) {
        super.onBindViewHolder(holder, position);

এটি "বাশির আল-মোমেনি" এর মতো অ্যানিমেটেড অ্যাডাপ্টার তৈরি করার স্বয়ংক্রিয় উপায়

import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.ScaleAnimation;

import java.util.Random;

/**
 * Created by eliaszkubala on 24.02.2017.
 */
public class AnimatedRecyclerView<T extends RecyclerView.ViewHolder> extends RecyclerView.Adapter<T> {


    @Override
    public T onCreateViewHolder(ViewGroup parent, int viewType) {
        return null;
    }

    @Override
    public void onBindViewHolder(T holder, int position) {
        setAnimation(holder.itemView, position);
    }

    @Override
    public int getItemCount() {
        return 0;
    }

    protected int mLastPosition = -1;

    protected void setAnimation(View viewToAnimate, int position) {
        if (position > mLastPosition) {
            ScaleAnimation anim = new ScaleAnimation(0.0f, 1.0f, 0.0f, 1.0f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
            anim.setDuration(new Random().nextInt(501));//to make duration random number between [0,501)
            viewToAnimate.startAnimation(anim);
            mLastPosition = position;
        }
    }

}

0

আমি মনে করি, এই রকম ব্যবহার করাই ভালো: (RecyclerView মধ্যে অ্যাডাপ্টারের ওভাররাইড মাত্র এক পদ্ধতি)

override fun onViewAttachedToWindow(holder: ViewHolder) {
    super.onViewAttachedToWindow(holder)

    setBindAnimation(holder)
}

আপনি যদি আরভিতে প্রতিটি সংযুক্ত অ্যানিমেশন চান want

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