package com.tutosandroidfrance.materialviewpagersample; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.animation.AnimatorSet; import android.animation.ObjectAnimator; import android.graphics.Color; import android.graphics.drawable.Drawable; import android.graphics.drawable.GradientDrawable; import android.media.Image; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentStatePagerAdapter; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import com.github.florent37.materialviewpager.MaterialViewPager; import com.squareup.picasso.Picasso; public class MainActivity extends ActionBarActivity { MaterialViewPager materialViewPager; View headerLogo; ImageView headerLogoContent; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //4 onglets final int tabCount = 4; //les vues définies dans @layout/header_logo headerLogo = findViewById(R.id.headerLogo); headerLogoContent = (ImageView) findViewById(R.id.headerLogoContent); //le MaterialViewPager this.materialViewPager = (MaterialViewPager) findViewById(R.id.materialViewPager); this.materialViewPager.getViewPager().setAdapter(new FragmentStatePagerAdapter(getSupportFragmentManager()) { @Override public Fragment getItem(int position) { //je créé pour chaque onglet un RecyclerViewFragment return RecyclerViewFragment.newInstance(); } @Override public int getCount() { return tabCount; } //le titre à afficher pour chaque page @Override public CharSequence getPageTitle(int position) { switch (position) { case 0: return getResources().getString(R.string.divertissement); case 1: return getResources().getString(R.string.sports); case 2: return getResources().getString(R.string.technologie); case 3: return getResources().getString(R.string.international); default: return "Page " + position; } } int oldItemPosition = -1; @Override public void setPrimaryItem(ViewGroup container, int position, Object object) { super.setPrimaryItem(container, position, object); //seulement si la page est différente if (oldItemPosition != position) { oldItemPosition = position; //définir la nouvelle couleur et les nouvelles images String imageUrl = null; int color = Color.BLACK; Drawable newDrawable = null; switch (position) { case 0: imageUrl = "http://www.skyscanner.fr/sites/default/files/image_import/fr/micro.jpg"; color = getResources().getColor(R.color.purple); newDrawable = getResources().getDrawable(R.drawable.ticket); break; case 1: imageUrl = "http://www.larousse.fr/encyclopedie/data/images/1311904-Balle_de_tennis_et_filet.jpg"; color = getResources().getColor(R.color.orange); newDrawable = getResources().getDrawable(R.drawable.tennis); break; case 2: imageUrl = "http://soocurious.com/fr/wp-content/uploads/2014/03/8-facettes-de-notre-cerveau-qui-ont-evolue-avec-la-technologie8.jpg"; color = getResources().getColor(R.color.cyan); newDrawable = getResources().getDrawable(R.drawable.light); break; case 3: imageUrl = "http://graduate.carleton.ca/wp-content/uploads/prog-banner-masters-international-affairs-juris-doctor.jpg"; color = getResources().getColor(R.color.green); newDrawable = getResources().getDrawable(R.drawable.earth); break; } //puis modifier les images/couleurs int fadeDuration = 400; materialViewPager.setColor(color, fadeDuration); materialViewPager.setImageUrl(imageUrl, fadeDuration); toggleLogo(newDrawable,color,fadeDuration); } } }); //permet au viewPager de garder 4 pages en mémoire (à ne pas utiliser sur plus de 4 pages !) this.materialViewPager.getViewPager().setOffscreenPageLimit(tabCount); //relie les tabs au viewpager this.materialViewPager.getPagerTitleStrip().setViewPager(this.materialViewPager.getViewPager()); } private void toggleLogo(final Drawable newLogo, final int newColor, int duration){ //animation de disparition final AnimatorSet animatorSetDisappear = new AnimatorSet(); animatorSetDisappear.setDuration(duration); animatorSetDisappear.playTogether( ObjectAnimator.ofFloat(headerLogo, "scaleX", 0), ObjectAnimator.ofFloat(headerLogo, "scaleY", 0) ); //animation d'apparition final AnimatorSet animatorSetAppear = new AnimatorSet(); animatorSetAppear.setDuration(duration); animatorSetAppear.playTogether( ObjectAnimator.ofFloat(headerLogo, "scaleX", 1), ObjectAnimator.ofFloat(headerLogo, "scaleY", 1) ); //après la disparition animatorSetDisappear.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { super.onAnimationEnd(animation); //modifie la couleur du cercle ((GradientDrawable) headerLogo.getBackground()).setColor(newColor); //modifie l'image contenue dans le cercle headerLogoContent.setImageDrawable(newLogo); //démarre l'animation d'apparition animatorSetAppear.start(); } }); //démarre l'animation de disparition animatorSetDisappear.start(); } }