گاهی اوقات شما نمی خواهید یک تصویر به طور ناگهانی روی صفحه, نمایش داده شود، بلکه می خواهید زمانی که تصویر از یک تصویر به تصویر دیگر منتقل می شود، نوعی انیمیشن روی صفحه اعمال کنید. این قابلیت توسط اندروید در قالب Image Switcher پشتیبانی می شود. Image Switcher به شما امکان می دهد برخی از انتقال ها را از طریق نحوه نمایش آنها روی صفحه نمایش روی تصاویر اضافه کنید. برای استفاده از ImageSwitcher، ابتدا باید ویو XML آن را تعریف کنید. به کد های زیر دقت کنید:
<ImageSwitcher android:id="@+id/imageSwitcher1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" > </ImageSwitcher>
اکنون یک نمونه از ImageSwithcer در فایل جاوا تعریف می کنیم و آن را از فایل XML دریافت می کنیم. به کدهای زیر دقت کنید :
private ImageSwitcher imageSwitcher; imageSwitcher = (ImageSwitcher)findViewById(R.id.imageSwitcher1);
کار بعدی که باید انجام دهیم رابط ViewFactory را پیاده سازی کنیم و متد اجرا نشده ای را پیاده سازی کنیم که یک imageView را برمی گرداند. نحو پیاده سازی به این شکل است :
imageSwitcher.setImageResource(R.drawable.ic_launcher); imageSwitcher.setFactory(new ViewFactory() { public View makeView() { ImageView myView = new ImageView(getApplicationContext()); return myView; } }
آخرین کاری که باید انجام دهید این است که انیمیشن را به ImageSwitcher اضافه کنید. شما باید یک شی از کلاس Animation را از طریق کلاس AnimationUtilities با فراخوانی یک متد استاتیک loadAnimation تعریف کنید. به کد های زیر دقت کنید :
Animation in = AnimationUtils.loadAnimation(this,android.R.anim.slide_in_left); imageSwitcher.setInAnimation(in); imageSwitcher.setOutAnimation(out);
متد setInAnimation انیمیشن ظاهر شی را روی صفحه تنظیم می کند در حالی که setOutAnimation برعکس عمل می کند. متد loadAnimation() یک شی انیمیشن ایجاد می کند.
دیگر متد های Image Switcher
به غیر از این متدها، متدهای دیگری نیز در کلاس ImageSwitcher در اندروید تعریف شده اند. در ادامه به این متد ها پرداخته ایم :
متد و توضیحات | ردیف |
setImageDrawable(Drawable drawable)
این متد یک تصویر را با تغییر دهنده تصویر تنظیم می کند. تصویر به صورت Bitmap ارسال می شود. |
1 |
setImageResource(int resid)
این متد یک تصویر را با تغییر دهنده تصویر تنظیم می کند. تصویر به شکل شناسه عدد صحیح یا همان id آن که مربوط به منابع می باشد, ارسال می شود. |
2 |
setImageURI(Uri uri)
این متد یک تصویر را با تغییر دهنده تصویر تنظیم می کند. لینک تصویر در این متد ارسال می شود. |
3 |
ImageSwitcher(Context context, AttributeSet attrs)
این متد یک شی تغییردهنده تصویر را که قبلاً برخی از ویژگیهای ارسال شده در متد را تنظیم کرده است، برمیگرداند. |
4 |
onInitializeAccessibilityEvent (AccessibilityEvent event)
این متد یک AccessibilityEvent را با اطلاعات مربوط به این View که منبع رویداد است، راه اندازی می کند. |
5 |
onInitializeAccessibilityNodeInfo (AccessibilityNodeInfo info)
این متد یک AccessibilityNodeInfo را با اطلاعات مربوط به این نما راهاندازی میکند. |
6 |
مثال
مثال زیر برخی از افکت های تغییر دهنده تصویر را بر روی bitmap نشان می دهد. این آموزش یک برنامه اساسی است که به شما امکان می دهد جلوه های انیمیشن را روی تصاویر مشاهده کنید. برای آزمایش با این مثال، باید آن را روی یک دستگاه واقعی اجرا کنید.
توضیحات | مرحله |
ابتدا یک پروژه جدید در اندروید استودیو با یک پکیج دلخواه ایجاد کنید. | 1 |
کدهای درون فایل MainActivity.class را مطابق کدهای که در پایین آورده ایم تغییر بدهید. | 2 |
کدهای درون فایل activity_main.xml را مطابق کدهای که در پایین آورده ایم تغییر بدهید. | 3 |
برنامه را بر روی یک تلفن واقعی یا شبیه ساز اجرا کنید و تست را انجام بدهید. | 4 |
کدهای فایل MainActivity.class
package com.foray.articlelib; import android.app.ActionBar.LayoutParams; import android.os.Bundle; import android.widget.Button; import android.widget.ImageSwitcher; import android.widget.ImageView; import android.widget.Toast; import androidx.appcompat.app.AppCompatActivity; public class MainActivity extends AppCompatActivity { private ImageSwitcher sw; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button b1 = findViewById(R.id.button); Button b2 = findViewById(R.id.button2); sw = findViewById(R.id.imageSwitcher); sw.setFactory(() -> { ImageView myView = new ImageView(getApplicationContext()); myView.setScaleType(ImageView.ScaleType.FIT_CENTER); myView.setLayoutParams(new ImageSwitcher.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); return myView; }); b1.setOnClickListener(v -> { Toast.makeText(getApplicationContext(), "تصویر قبل", Toast.LENGTH_LONG).show(); sw.setImageResource(R.drawable.abc); }); b2.setOnClickListener(v -> { Toast.makeText(getApplicationContext(), "تصویر بعد", Toast.LENGTH_LONG).show(); sw.setImageResource(R.drawable.tp); }); } }
کدهای فایل activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:padding="16dp" tools:context=".MainActivity"> <TextView android:id="@+id/textview" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:text="مثال ImageSlider" android:textSize="25dp" /> <TextView android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/textview" android:layout_centerHorizontal="true" android:text="7Cloner.com" android:textColor="#000000" android:textSize="25dp" /> <ImageSwitcher android:id="@+id/imageSwitcher" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/textView" android:layout_centerHorizontal="true" android:layout_marginTop="168dp" /> <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/textView" android:layout_centerHorizontal="true" android:text="قبلی" /> <Button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignStart="@+id/button" android:layout_alignLeft="@+id/button" android:layout_alignParentBottom="true" android:text="بعدی" /> </RelativeLayout>
نتیجه
همان طور که در تصاویر بالا می بینید می توانید لیستی از تصاویر خود را به اشکال مختلف در یک ImageSwitcher به نمایش در بیاورید. این لیست را میتوانید با انیمیشن های مختلف برای کاربران خود به نمایش در بیاورید.