Merhaba arkadaşlar, bugün sizlere android intro slider oluşturmayı anlatıcam. Bildiğiniz gibi birçok geliştirici yeni kullanıcılarına uyulamanın çalışma prensibini hızlıca anlatabilmek için intro sliderlardan faydalanmaktadır. Hadi başlayalım.
İlk olarak projemizi oluşturuyoruz ve buradan ihtiyacınız olacak olan res dosyasını indirip projenize ekliyorsunuz.
Daha sonra res/values altındaki color.xml dosyasını açıyoruz ve aşşağıdaki gibi güncelliyoruz.
res/values altında strings.xml ‘i açıp güncelliyoruz.
strings.xml
12345678910111213141516171819202122
<resources><stringname="app_name">Intro Slider</string><stringname="title_activity_welcome">Home Screen</string><stringname="next">NEXT</string><stringname="skip">SKIP</string><stringname="start">GOT IT</string><stringname="slide_1_title">Hello Food!</string><stringname="slide_1_desc">The easiest way to order food from your favourite restaurant!</string><stringname="slide_2_title">Movie Tickets</string><stringname="slide_2_desc">Book movie tickets for your family and friends!</string><stringname="slide_3_title">Great Discounts</string><stringname="slide_3_desc">Best discounts on every single service we offer!</string><stringname="slide_4_title">World Travel</string><stringname="slide_4_desc">Book tickets of any transportation and travel the world!</string><stringname="play_again_desc">To see the welcome slider again, goto Settings -> apps -> welcome slider -> clear data</string><stringname="play_again">Play Again</string></resources>
res/values altında dimens.xml ‘i açıp güncelliyoruz.
dimens.xml
123456789101112
<resources><!-- Default screen margins, per the Android Design guidelines. --><dimenname="activity_horizontal_margin">16dp</dimen><dimenname="activity_vertical_margin">16dp</dimen><dimenname="fab_margin">16dp</dimen><dimenname="dots_height">30dp</dimen><dimenname="dots_margin_bottom">20dp</dimen><dimenname="img_width_height">120dp</dimen><dimenname="slide_title">30dp</dimen><dimenname="slide_desc">16dp</dimen><dimenname="desc_padding">40dp</dimen></resources>
style.xml ‘i açıp güncelliyoruz.
style.xml
1234567891011121314151617
<resources><!-- Base application theme. --><stylename="AppTheme"parent="Theme.AppCompat.Light.DarkActionBar"><!-- Customize your theme here. --><itemname="colorPrimary">@color/colorPrimary</item><itemname="colorPrimaryDark">@color/colorPrimaryDark</item><itemname="colorAccent">@color/colorAccent</item><itemname="windowActionBar">false</item><itemname="windowNoTitle">true</item></style><stylename="AppTheme.AppBarOverlay"parent="ThemeOverlay.AppCompat.Dark.ActionBar"/><stylename="AppTheme.PopupOverlay"parent="ThemeOverlay.AppCompat.Light"/></resources>
Intro slider kullanıcı uygulamayı ilk defa çalıştırdığında görünmelidir. Uygulama ikinci kez çalıştırıldığında direkt uygulama açılmalıdır. Bunun için SharedPreferences kullanılarak bir boolean değer tutacağız.
PrefManager.java adında bir class oluşturuyoruz ve içerisine setFirstTimeLaunch() ve isFirstTimeLaunch() fonksiyonlarını yazıyoruz.
packageio.github.ensr.introslider;importandroid.content.Context;importandroid.content.SharedPreferences;/** * Created by ensr on 05/05/16. */publicclassPrefManager{SharedPreferencespref;SharedPreferences.Editoreditor;Context_context;// shared pref modeintPRIVATE_MODE=0;// Shared preferences file nameprivatestaticfinalStringPREF_NAME="welcome";privatestaticfinalStringIS_FIRST_TIME_LAUNCH="IsFirstTimeLaunch";publicPrefManager(Contextcontext){this._context=context;pref=_context.getSharedPreferences(PREF_NAME,PRIVATE_MODE);editor=pref.edit();}publicvoidsetFirstTimeLaunch(booleanisFirstTime){editor.putBoolean(IS_FIRST_TIME_LAUNCH,isFirstTime);editor.commit();}publicbooleanisFirstTimeLaunch(){returnpref.getBoolean(IS_FIRST_TIME_LAUNCH,true);}}
Şimdi intro slider'ın sayfalarını oluşturalım. Ben 4 sayfadan oluşan bir slider oluşturucam. res/values altına welcome_side1.xml , welcome_side2.xml , welcome_side3.xml , welcome_side4.xml xml dosyalarını aşşağıdaki gibi oluşturuyoruz.
Burada slider sayfalarının içerisine konulacağı ViewPager ‘ı ve butonları oluşturduk. Şimdi sıra önceden oluşturduğumuz activity'nin içerisini doldurmaya. İlk olarak prefManager.isFirstTimeLaunch() fonksiyonunu kullanarak uygulamaya ilk defa girilip girilmediğine bakıyoruz. Eğer ilk giriş değilse intro slider skip edilecektir. ViewPager için de bir PagerAdaptor oluşturuyoruz. Skip ve Next butonları için de click event i oluşturuyoruz:
packageio.github.ensr.introslider;importandroid.content.Context;importandroid.content.Intent;importandroid.graphics.Color;importandroid.os.Build;importandroid.os.Bundle;importandroid.support.v4.view.PagerAdapter;importandroid.support.v4.view.ViewPager;importandroid.support.v7.app.AppCompatActivity;importandroid.text.Html;importandroid.view.LayoutInflater;importandroid.view.View;importandroid.view.ViewGroup;importandroid.view.Window;importandroid.view.WindowManager;importandroid.widget.Button;importandroid.widget.LinearLayout;importandroid.widget.TextView;publicclassWelcomeActivityextendsAppCompatActivity{privateViewPagerviewPager;privateMyViewPagerAdaptermyViewPagerAdapter;privateLinearLayoutdotsLayout;privateTextView[]dots;privateint[]layouts;privateButtonbtnSkip,btnNext;privatePrefManagerprefManager;@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);// Checking for first time launch - before calling setContentView()prefManager=newPrefManager(this);if(!prefManager.isFirstTimeLaunch()){launchHomeScreen();finish();}// Making notification bar transparentif(Build.VERSION.SDK_INT>=21){getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE|View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);}setContentView(R.layout.activity_welcome);viewPager=(ViewPager)findViewById(R.id.view_pager);dotsLayout=(LinearLayout)findViewById(R.id.layoutDots);btnSkip=(Button)findViewById(R.id.btn_skip);btnNext=(Button)findViewById(R.id.btn_next);// layouts of all welcome sliders// add few more layouts if you wantlayouts=newint[]{R.layout.welcome_slide1,R.layout.welcome_slide2,R.layout.welcome_slide3,R.layout.welcome_slide4};// adding bottom dotsaddBottomDots(0);// making notification bar transparentchangeStatusBarColor();myViewPagerAdapter=newMyViewPagerAdapter();viewPager.setAdapter(myViewPagerAdapter);viewPager.addOnPageChangeListener(viewPagerPageChangeListener);btnSkip.setOnClickListener(newView.OnClickListener(){@OverridepublicvoidonClick(Viewv){launchHomeScreen();}});btnNext.setOnClickListener(newView.OnClickListener(){@OverridepublicvoidonClick(Viewv){// checking for last page// if last page home screen will be launchedintcurrent=getItem(+1);if(current<layouts.length){// move to next screenviewPager.setCurrentItem(current);}else{launchHomeScreen();}}});}privatevoidaddBottomDots(intcurrentPage){dots=newTextView[layouts.length];int[]colorsActive=getResources().getIntArray(R.array.array_dot_active);int[]colorsInactive=getResources().getIntArray(R.array.array_dot_inactive);dotsLayout.removeAllViews();for(inti=0;i<dots.length;i++){dots[i]=newTextView(this);dots[i].setText(Html.fromHtml("•"));dots[i].setTextSize(35);dots[i].setTextColor(colorsInactive[currentPage]);dotsLayout.addView(dots[i]);}if(dots.length>0)dots[currentPage].setTextColor(colorsActive[currentPage]);}privateintgetItem(inti){returnviewPager.getCurrentItem()+i;}privatevoidlaunchHomeScreen(){prefManager.setFirstTimeLaunch(false);startActivity(newIntent(WelcomeActivity.this,MainActivity.class));finish();}// viewpager change listenerViewPager.OnPageChangeListenerviewPagerPageChangeListener=newViewPager.OnPageChangeListener(){@OverridepublicvoidonPageSelected(intposition){addBottomDots(position);// changing the next button text 'NEXT' / 'GOT IT'if(position==layouts.length-1){// last page. make button text to GOT ITbtnNext.setText(getString(R.string.start));btnSkip.setVisibility(View.GONE);}else{// still pages are leftbtnNext.setText(getString(R.string.next));btnSkip.setVisibility(View.VISIBLE);}}@OverridepublicvoidonPageScrolled(intarg0,floatarg1,intarg2){}@OverridepublicvoidonPageScrollStateChanged(intarg0){}};/** * Making notification bar transparent */privatevoidchangeStatusBarColor(){if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.LOLLIPOP){Windowwindow=getWindow();window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);window.setStatusBarColor(Color.TRANSPARENT);}}/** * View pager adapter */publicclassMyViewPagerAdapterextendsPagerAdapter{privateLayoutInflaterlayoutInflater;publicMyViewPagerAdapter(){}@OverridepublicObjectinstantiateItem(ViewGroupcontainer,intposition){layoutInflater=(LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);Viewview=layoutInflater.inflate(layouts[position],container,false);container.addView(view);returnview;}@OverridepublicintgetCount(){returnlayouts.length;}@OverridepublicbooleanisViewFromObject(Viewview,Objectobj){returnview==obj;}@OverridepublicvoiddestroyItem(ViewGroupcontainer,intposition,Objectobject){Viewview=(View)object;container.removeView(view);}}}
Son olarakta AndroidManifest.xml ‘de WelcomeActivity'yi launcher activity olarak tanımlıyoruz.