एंड्रॉइड में ViewFlipper के साथ व्यू फ्लिपिंग एनिमेशन
यह ट्यूटोरियल ViewFlipper का उपयोग करके व्यूज़ के बीच एनिमेटेड ट्रांजिशन बनाने का तरीका दिखाता है, जिसमें ऑटो-फ्लिपिंग और मैनुअल नेविगेशन शामिल है।
लेआउट (activity_main.xml)
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="16dp">
<ViewFlipper
android:id="@+id/viewFlipper"
android:layout_width="match_parent"
android:layout_height="300dp"
android:layout_above="@+id/btnPrev"
android:inAnimation="@android:anim/slide_in_left"
android:outAnimation="@android:anim/slide_out_right">
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="centerCrop"
android:src="@drawable/image1"
android:contentDescription="स्लाइड 1" />
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:text="दूसरा व्यू - बटन"
android:textSize="32sp"
android:textStyle="bold"
android:textColor="#FFFFFF"
android:background="#2196F3" />
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="centerCrop"
android:src="@drawable/image3"
android:contentDescription="स्लाइड 3" />
</ViewFlipper>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:orientation="horizontal"
android:gravity="center"
android:padding="16dp">
<Button
android:id="@+id/btnPrev"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="पिछला" />
<Button
android:id="@+id/btnNext"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:text="अगला" />
</LinearLayout>
</RelativeLayout>
कस्टम एनिमेशन (res/anim/)
slide_in_right.xml
<set xmlns:android="https://schemas.android.com/apk/res/android">
<translate
android:duration="@android:integer/config_mediumAnimTime"
android:fromXDelta="100%"
android:toXDelta="0%" />
<alpha
android:duration="@android:integer/config_mediumAnimTime"
android:fromAlpha="0.0"
android:toAlpha="1.0" />
</set>
slide_out_left.xml
<set xmlns:android="https://schemas.android.com/apk/res/android">
<translate
android:duration="@android:integer/config_mediumAnimTime"
android:fromXDelta="0%"
android:toXDelta="-100%" />
<alpha
android:duration="@android:integer/config_mediumAnimTime"
android:fromAlpha="1.0"
android:toAlpha="0.0" />
</set>
slide_in_left.xml (डिफ़ॉल्ट के लिए)
<set xmlns:android="https://schemas.android.com/apk/res/android">
<translate
android:duration="@android:integer/config_mediumAnimTime"
android:fromXDelta="-100%"
android:toXDelta="0%" />
<alpha
android:duration="@android:integer/config_mediumAnimTime"
android:fromAlpha="0.0"
android:toAlpha="1.0" />
</set>
slide_out_right.xml (डिफ़ॉल्ट के लिए)
<set xmlns:android="https://schemas.android.com/apk/res/android">
<translate
android:duration="@android:integer/config_mediumAnimTime"
android:fromXDelta="0%"
android:toXDelta="100%" />
<alpha
android:duration="@android:integer/config_mediumAnimTime"
android:fromAlpha="1.0"
android:toAlpha="0.0" />
</set>
MainActivity.java
import android.os.Bundle;
import android.view.Gravity;
import android.view.View;
import android.widget.TextView;
import android.widget.ViewFlipper;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
private ViewFlipper viewFlipper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
viewFlipper = findViewById(R.id.viewFlipper);
// प्रोग्रामेटिकली व्यू जोड़ें
TextView dynamicView = new TextView(this);
dynamicView.setText("डायनामिकली जोड़ा गया TextView");
dynamicView.setGravity(Gravity.CENTER);
dynamicView.setTextSize(24);
dynamicView.setTextColor(0xFFFFFFFF);
dynamicView.setBackgroundColor(0xFF4CAF50);
viewFlipper.addView(dynamicView);
// ऑटो-फ्लिपिंग सेटअप
viewFlipper.setFlipInterval(3000); // 3 सेकंड
viewFlipper.setAutoStart(true);
viewFlipper.startFlipping();
// बटन लिस्टनर्स
findViewById(R.id.btnPrev).setOnClickListener(this::previousView);
findViewById(R.id.btnNext).setOnClickListener(this::nextView);
}
public void previousView(View v) {
viewFlipper.setInAnimation(this, R.anim.slide_in_right);
viewFlipper.setOutAnimation(this, R.anim.slide_out_left);
viewFlipper.showPrevious();
}
public void nextView(View v) {
viewFlipper.setInAnimation(this, R.anim.slide_in_left);
viewFlipper.setOutAnimation(this, R.anim.slide_out_right);
viewFlipper.showNext();
}
@Override
protected void onResume() {
super.onResume();
viewFlipper.startFlipping();
}
@Override
protected void onPause() {
super.onPause();
viewFlipper.stopFlipping(); // बैटरी बचाएं
}
}
ViewFlipper vs ViewPager/RecyclerView
| कंपोनेंट | सबसे अच्छा लिए | फीचर्स |
|---|---|---|
| ViewFlipper | सिंपल स्लाइडशो, 2-5 व्यू | ऑटो-फ्लिप, सिंपल एनिमेशन, लाइटवेट |
| ViewPager2 | स्वाइपेबल स्क्रीन्स, टैब्स | स्वाइप जेस्चर, फ्रैगमेंट सपोर्ट, RecyclerView आधारित |
| RecyclerView + Carousel | कॉम्प्लेक्स लिस्ट, इनफिनिट स्क्रॉल | व्यू रीसाइक्लिंग, लेआउट मैनेजर, DiffUtil |
उन्नत: टच स्वाइप सपोर्ट जोड़ना
viewFlipper.setOnTouchListener(new OnSwipeTouchListener(this) {
@Override
public void onSwipeLeft() { nextView(null); }
@Override
public void onSwipeRight() { previousView(null); }
});
// OnSwipeTouchListener एक कस्टम क्लास है जो GestureDetector का उपयोग करती है
महत्वपूर्ण मेथड्स
showNext()/showPrevious()setDisplayedChild(index)- सीधे इंडेक्स पर जाएंstartFlipping()/stopFlipping()setFlipInterval(millis)addView(View)/removeView(View)getCurrentView()/getDisplayedChild()