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();
}
}