Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Android

Android में RecyclerView आइटम एनिमेशन स्क्रॉलिंग के दौरान

Android में RecyclerView आइटम एनिमेशन: एक पूर्ण गाइड

RecyclerView आइटम एनिमेशन के उदाहरण में जाने से पहले, हमें पता होना चाहिए कि Android में RecyclerView क्या है। RecyclerView, ListView का एक उन्नत संस्करण है और यह View Holder डिज़ाइन पैटर्न पर आधारित है। RecyclerView का उपयोग करके हम ग्रिड और आइटम्स की सूची प्रदर्शित कर सकते हैं।

CardView, FrameLayout द्वारा विस्तारित है और इसका उपयोग कार्ड तरीके से आइटम दिखाने के लिए किया जाता है। यह पूर्वनिर्धारित टैग के रूप में त्रिज्या और छाया का समर्थन करता है।

यह उदाहरण दर्शाता है कि CardView के साथ RecyclerView में एनिमेशन को कैसे एकीकृत किया जाए, एक सुंदर छात्र रिकॉर्ड ऐप बनाकर जो छात्र का नाम और उम्र प्रदर्शित करता है।

चरण 1 - नया प्रोजेक्ट बनाएं

Android Studio में एक नया प्रोजेक्ट बनाएं: File → New Project पर जाएं और नया प्रोजेक्ट बनाने के लिए सभी आवश्यक विवरण भरें।

चरण 2 - निर्भरताएं जोड़ें

build.gradle खोलें और RecyclerView और CardView लाइब्रेरी निर्भरताएं जोड़ें।

apply plugin: 'com.android.application'
android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "com.example.andy.tutorialspoint"
        minSdkVersion 19
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}
dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:28.0.0'
    implementation 'com.android.support:design:28.0.0'
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
    implementation 'com.android.support:cardview-v7:28.0.0'
    implementation 'com.android.support:recyclerview-v7:28.0.0'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}

चरण 3 - activity_main.xml लेआउट

res/layout/activity_main.xml में निम्न कोड जोड़ें:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:tools="https://schemas.android.com/tools"
    xmlns:app="https://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:showIn="@layout/activity_main"
    tools:context=".MainActivity">
    <android.support.v7.widget.RecyclerView
        android:id="@+id/recycler_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:scrollbars="vertical" />
</RelativeLayout>

उपरोक्त कोड में हमने RecyclerView को RelativeLayout के रूप में पैरेंट लेआउट में जोड़ा है।

चरण 4 - MainActivity.java

src/MainActivity.java में निम्न कोड जोड़ें:

package com.example.andy.tutorialspoint;

import android.annotation.TargetApi;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.RequiresApi;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.DividerItemDecoration;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.widget.LinearLayout;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class MainActivity extends AppCompatActivity {
    private RecyclerView recyclerView;
    private StudentAdapter studentAdapter;
    private List<StudentData> studentDataList = new ArrayList<>();

    @TargetApi(Build.VERSION_CODES.O)
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        recyclerView = findViewById(R.id.recycler_view);
        studentAdapter = new StudentAdapter(studentDataList, MainActivity.this);
        RecyclerView.LayoutManager manager = new LinearLayoutManager(this);
        recyclerView.setLayoutManager(manager);
        recyclerView.setAdapter(studentAdapter);
        prepareStudentData();
    }

    @RequiresApi(api = Build.VERSION_CODES.N)
    private void prepareStudentData() {
        StudentData data = new StudentData("साई", 25);
        studentDataList.add(data);
        data = new StudentData("साई", 25);
        studentDataList.add(data);
        data = new StudentData("रघु", 20);
        studentDataList.add(data);
        data = new StudentData("राज", 28);
        studentDataList.add(data);
        data = new StudentData("अमर", 15);
        studentDataList.add(data);
        data = new StudentData("बापू", 19);
        studentDataList.add(data);
        data = new StudentData("चंद्र", 52);
        studentDataList.add(data);
        data = new StudentData("देराज", 30);
        studentDataList.add(data);
        data = new StudentData("एशांत", 28);
        studentDataList.add(data);

        Collections.sort(studentDataList, new Comparator<StudentData>() {
            @Override
            public int compare(StudentData o1, StudentData o2) {
                return o1.name.compareTo(o2.name);
            }
        });
    }
}

उपरोक्त कोड में हमने RecyclerView और studentAdapter जोड़ा है। उस student adapter में हमने studentDataList को ArrayList के रूप में पास किया है। Student data list में छात्र का नाम और उम्र होती है।

RecyclerView आइटम्स की तुलना करने के लिए हमने Collections framework और sort विधि का उपयोग किया है:

Collections.sort(studentDataList, new Comparator<StudentData>() {
    @Override
    public int compare(StudentData o1, StudentData o2) {
        return o1.name.compareTo(o2.name);
    }
});

उपरोक्त कोड में हम नाम का उपयोग करके तत्वों की तुलना कर रहे हैं।

चरण 5 - StudentAdapter.java

src/StudentAdapter.java की संशोधित सामग्री निम्न है:

package com.example.andy.tutorialspoint;

import android.content.Context;
import android.graphics.Color;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.LinearLayout;
import android.widget.TextView;
import java.util.List;
import java.util.Random;

class StudentAdapter extends RecyclerView.Adapter<StudentAdapter.MyViewHolder> {
    List<StudentData> studentDataList;
    Context context;
    private int lastPosition = -1;

    public StudentAdapter(List<StudentData> studentDataList, Context context) {
        this.studentDataList = studentDataList;
        this.context = context;
    }

    @NonNull
    @Override
    public MyViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        View itemView = LayoutInflater.from(viewGroup.getContext())
                .inflate(R.layout.student_list_row, viewGroup, false);
        return new MyViewHolder(itemView);
    }

    @Override
    public void onBindViewHolder(MyViewHolder viewHolder, int i) {
        StudentData data = studentDataList.get(i);
        Random rnd = new Random();
        int currentColor = Color.argb(255, rnd.nextInt(256), rnd.nextInt(256), rnd.nextInt(256));
        viewHolder.parent.setBackgroundColor(currentColor);
        viewHolder.name.setText(data.name);
        viewHolder.age.setText(String.valueOf(data.age));
        setAnimation(viewHolder.parent, i);
    }

    private void setAnimation(View viewToAnimate, int position) {
        // यदि बाउंड व्यू पहले स्क्रीन पर प्रदर्शित नहीं हुआ था, तो इसे एनिमेट करें
        if (position > lastPosition) {
            Animation animation = AnimationUtils.loadAnimation(context, android.R.anim.slide_in_left);
            viewToAnimate.startAnimation(animation);
            lastPosition = position;
        }
    }

    @Override
    public int getItemCount() {
        return studentDataList.size();
    }

    class MyViewHolder extends RecyclerView.ViewHolder {
        TextView name, age;
        LinearLayout parent;

        public MyViewHolder(View itemView) {
            super(itemView);
            parent = itemView.findViewById(R.id.parent);
            name = itemView.findViewById(R.id.name);
            age = itemView.findViewById(R.id.age);
        }
    }
}

एडाप्टर क्लास में चार मुख्य विधियाँ हैं:

  • onCreateViewHolder() - व्यू होल्डर बनाने और व्यू लौटाने के लिए उपयोग किया जाता है।
  • onBindViewHolder() - बनाए गए व्यू होल्डर के साथ बाइंड करता है।
  • getItemCount() - सूची का आकार रखता है।
  • MyViewHolder क्लास - RecyclerView.ViewHolder द्वारा विस्तारित एक आंतरिक व्यू होल्डर क्लास।

RecyclerView आइटम्स के लिए रैंडम बैकग्राउंड सेट करने के लिए, हमने Random क्लास (Android में पूर्वनिर्धारित क्लास) का उपयोग करके रैंडम रंग उत्पन्न किए और व्यू आइटम के पैरेंट में रंग जोड़ा:

Random rnd = new Random();
int currentColor = Color.argb(255, rnd.nextInt(256), rnd.nextInt(256), rnd.nextInt(256));
viewHolder.parent.setBackgroundColor(currentColor);

एडाप्टर में हमने setAnimation() का उपयोग किया है, जिसमें हमने चाइल्ड आइटम के पैरेंट और उसकी स्थिति पास की है:

setAnimation(viewHolder.parent, i);

उपरोक्त विधि में viewHolder.parent चाइल्ड आइटम लेआउट में LinearLayout है और "i" व्यू की स्थिति है।

private void setAnimation(View viewToAnimate, int position) {
    // यदि बाउंड व्यू पहले स्क्रीन पर प्रदर्शित नहीं हुआ था, तो इसे एनिमेट करें
    if (position > lastPosition) {
        Animation animation = AnimationUtils.loadAnimation(context, android.R.anim.slide_in_left);
        viewToAnimate.startAnimation(animation);
        lastPosition = position;
    }
}

उपरोक्त विधि में हम वर्तमान स्थिति की तुलना अंतिम स्थिति से ग्रेटर थान (>) का उपयोग करके करते हैं, फिर AnimationUtils क्लास से एनिमेशन लागू करते हैं।

चरण 6 - student_list_row.xml

res/layout/student_list_row.xml की संशोधित सामग्री:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView
    xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:card_view="https://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    card_view:cardCornerRadius="4dp"
    android:id="@+id/card_view"
    android:layout_margin="10dp"
    android:layout_height="200dp">
    <LinearLayout
        android:id="@+id/parent"
        android:layout_gravity="center"
        android:layout_width="match_parent"
        android:orientation="vertical"
        android:gravity="center"
        android:layout_height="match_parent">
        <TextView
            android:id="@+id/name"
            android:layout_width="wrap_content"
            android:gravity="center"
            android:textSize="25sp"
            android:textColor="#FFF"
            android:layout_height="wrap_content" />
        <TextView
            android:id="@+id/age"
            android:layout_width="wrap_content"
            android:gravity="center"
            android:textSize="25sp"
            android:textColor="#FFF"
            android:layout_height="wrap_content" />
    </LinearLayout>
</android.support.v7.widget.CardView>

उपरोक्त लिस्ट आइटम व्यू में हमने कार्ड व्यू के अंदर नाम और उम्र के लिए दो टेक्स्ट व्यू बनाए हैं। कार्ड व्यू में पूर्वनिर्धारित कॉर्नर रेडियस और छाया गुण होते हैं। इसलिए हमने कार्डव्यू के साथ कॉर्नर रेडियस का उपयोग किया है।

चरण 7 - StudentData.java

src/StudentData.java की सामग्री:

package com.example.andy.tutorialspoint;

class StudentData {
    String name;
    int age;

    public StudentData(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

उपरोक्त कोड StudentData ऑब्जेक्ट के बारे में बताता है। आइए अपने एप्लिकेशन को चलाने का प्रयास करें। मान लें कि आपने अपने वास्तविक Android मोबाइल डिवाइस को कंप्यूटर से जोड़ा है। Android Studio से ऐप चलाने के लिए, अपनी प्रोजेक्ट की एक्टिविटी फ़ाइलों में से एक खोलें और टूलबार से Run आइकन पर क्लिक करें। विकल्प के रूप में अपना मोबाइल डिवाइस चुनें और फिर अपने मोबाइल डिवाइस की जांच करें जो आपकी डिफ़ॉल्ट स्क्रीन प्रदर्शित करेगा।

Android में RecyclerView आइटम एनिमेशन स्क्रॉलिंग के दौरान

अब RecyclerView तक नीचे स्क्रॉल करें, यह नीचे दिखाए अनुसार परिणाम दिखाएगा:

Android में RecyclerView आइटम एनिमेशन स्क्रॉलिंग के दौरान

अब अंतिम तत्व देखें, यह एनिमेशन के साथ लोड हो रहा है। अधिक संदर्भ नमूने नीचे दिखाए अनुसार उपलब्ध हैं।

  1. Android में View के बैकग्राउंड कलर बदलाव को एनिमेट कैसे करें? Android में View के बैकग्राउंड कलर बदलाव को एनिमेट कैसे करें?

    TransitionDrawable का उपयोग करके View के बैकग्राउंड कलर को स्मूथली एनिमेट करने का तरीका। चरण 1: नया प्रोजेक्ट बनाएं Android Studio में नया प्रोजेक्ट बनाएं। चरण 2: लेआउट res/layout/activity_main.xml: <?xml version=1.0 encoding=utf-8?> <RelativeLayout xmlns:android=https://schemas.android.c

  1. RecyclerView आइटम्स को स्क्रीन पर आने पर एनिमेट कैसे करें RecyclerView आइटम्स को स्क्रीन पर आने पर एनिमेट कैसे करें

    RecyclerView आइटम्स के लिए लेआउट एनिमेशन लागू करना RecyclerView में आइटम्स को स्क्रीन पर आने पर आकर्षक एनिमेशन देना यूजर एक्सपीरियंस को बेहतर बनाता है। यह उदाहरण विभिन्न दिशाओं (ऊपर से नीचे, नीचे से ऊपर, बाएं से दाएं, दाएं से बाएं) में एनिमेशन लागू करना सिखाता है। चरण 1: नया प्रोजेक्ट बनाएं Android

  1. Android में विभिन्न स्क्रीन साइज़ को सपोर्ट कैसे करें? Android में विभिन्न स्क्रीन साइज़ को सपोर्ट कैसे करें?

    यह उदाहरण दर्शाता है कि Android ऐप में विभिन्न स्क्रीन साइज़ और डेंसिटी को कैसे सपोर्ट किया जाता है। चरण 1: नया प्रोजेक्ट बनाएं Android Studio में File → New Project पर जाएं और आवश्यक विवरण भरकर प्रोजेक्ट बनाएं। चरण 2: लेआउट XML में कोड जोड़ें res/layout/activity_main.xml में निम्नलिखित कोड जोड़ें