یکی از دوستان مشکل با ساخت اسلاید شو داشت و قرار دادن نوار حرکت برای تغییر صفحات.
گفتم یه آموزش قرار بدم که شاید به درد دوستان بخوره.
اولا اینکه این روش راحت هست یا خیر؟
برای هر برنامه نویس ممکنه یه قسمت از کد نویسی راحت باشه. پس نمیشه گفت کدوم کد راحته یا سخت.اما روشی که میشه استفاده کرد(یا خودم قبلا استفاده میکردم و به نظرم راحته) استفاده از فرگمنت هست. که خیلی جمع و جور هست .این آموزش دوقسمت داره.
قسمت اول:(ساخت اسلاید شو هست) و قسمت دوم: ( قرار دادن نوار حرکت برای عوض کردن صفحه)
قسمت اول:
ما فرض میکنیم اسلاید شویی که میسازیم 3 صفحه داشته باشه.
قبل از هر چیز شما باید دو عکس دایره ای شکل با فتوشاپ یا هر برنامه ای دیگه بسازید .که این دو عکس روند حرکت صفحه هات نشون بده .
که یکیش به رنگ سفید( cricle_white)و یکی به رنگ قرمز (cricle_red).. بعد از ساخت این دوعکس آنرا در پوشه drawableقرار دهید
روش کار:
ابتدا یک فایل xml به نام activity_viewpager بسازید. دراین فایل یک ViewPager داریم و یک layout که زیر ViewPager قرار داره .
این layout زیرین به صورت افقی هست و 3 شی image داره .که نوار حرکت اسلاید شو نشون میده.
کد پیاچپی:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="fill_parent"
android:layout_above="@+id/linear_show_move"
android:layout_height="wrap_content" />
<LinearLayout
android:id="@+id/linear_show_move"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:gravity="center_horizontal"
android:orientation="horizontal" >
<ImageView
android:id="@+id/imag1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/cricle_white"
/>
<ImageView
android:id="@+id/imag2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/cricle_withe"
/>
<ImageView
android:id="@+id/imag3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/cricle_withe"
/>
</LinearLayout>
</RelativeLayout>
بعد از اینکار دو فایل به نام page1.xml و page2.xml و page3.xml میسازیم و محتوایی که میخواییم بسازیم داخلش میزاریم.
حالا در فایل جاوا به صورت زیر عمل میکنیم
کد پیاچپی:
public class ViewPager extends FragmentActivity {
ImageView imag1;
ImageView imag2;
ImageView imag3;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_view_pager);
ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager);
viewPager.setAdapter(new MyPagerAdapter(getSupportFragmentManager()) );
}
در کد بالا ما یک شی از viewPager ساختیم و آداپتور خودمون بهش پاس دادیم.
حالا کلاس آداپتور خودمون به این صورت تعریف میکنیم که این آداپتر از فرگمنت آداپتر ارث بری کرده.
متدgetcount و getItem همانند متدهایی هست که در BaseAdapter وجود داره، هست.یعنی تعداد آیتم و خود آیتم به ترتیب ،متدهای ذکر شده بر میگردونه.
کد پیاچپی:
class MyPagerAdapter extends FragmentPagerAdapter {
public MyPagerAdapter (FragmentManager fragmentManager)
{
super(fragmentManager);
}
@Override
public int getCount() {
return 3;
}
@Override
public Fragment getItem(int position) {
switch (position){
case 0:
{
return new Page1();
}
case 1 :
{
return new Page2();
}
case 2:
{
return new page3();
}
}
}
تا الان یک viewPager رو ساختیم و آداپتر بهش پاس دادیم .حالا واسه این که صفحه ها داخل آیتم قرار بدیم کافیه 3 تا کلاسpage3, page1 , page2 بسازیم(که به صورت کلاس درونی کلاس ViewPager هستند) که ارث بری میکنه از فرگمنت.
کد پیاچپی:
public class Page1 extends Fragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
LinearLayout customView = (LinearLayout) inflater.inflate(R.layout.page1, container,false);
TextView T1=customView.findViewById(R.id.text1);
return customView;
}
}
در کد بالا، در متد OncerateView ما صفحه page1 رو inflate میکنیم و در یک شی میریزیم و سپس اون شی return میکنیم.
برای page2 و page3هم مانند page1 همین کار رو میکنیم.
حالا اسلاید شو ما ساخته شد و نمایش داده میشه..
امتیاز خوبی که این روش داره اینه که شما برای هر صفحه از اسلاید شو میتونید ساختار و صفحه بندی جدا گونه ای طراحی کنید که میتونه به برنامه اتون زیبایی و انعطاف پذیری بیشتری بده.