• Non classé
  • 8

MaterialViewPager – Créer facilement une application au look Android Material !

Vous aimerez aussi...

8 réponses

  1. saluessa dit :

    Hello, j’ai une problème avec le setPrimaryItem() voici mon MainActivity ;
    public class MainActivity extends ActionBarActivity {

    MaterialViewPager materialViewPager;
    View headerLogo;
    ImageView headerLogoContent;
    int oldItemPosition = -1;

    @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);

    //remplir le ViewPager
    this.materialViewPager.getViewPager().setAdapter(new FragmentStatePagerAdapter(setPrimaryItem()) {

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

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

    int oldItemPosition = -1;

    @Override
    public void setPrimaryItem(ViewGroup container, int position, Object object) {
    super.setPrimaryItem(container, position, object); //ici est l’erreur

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

    }

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

  2. Florent Champigny dit :

    c’est plutot

    this.materialViewPager.getViewPager().setAdapter(new FragmentStatePagerAdapter(getSupportFragmentManager()){
    public void setPrimaryItem() {

    }

  3. sylvain dit :

    Hello, j’ai une problème avec le mRecyclerView.setLayoutManager(new GridLayoutManager(getActivity(),2));

    lorsque je veut des card view non plus en linear mais en gridlayout il me place un cardview dans l’entete du view pager .. une solution ?

    merci d’avance

  4. sylvain dit :

    hello toujours pas de réponse pour mon problème ?????

  5. Kevin De Jesus Ferreira dit :

    Salut,

    c’est surement un problème de la lib, indique le dans les issues du github https://github.com/florent37/MaterialViewPager . N’oublie pas de mettre ton code + un screenshot

    Merci d’avance

  6. sylvain dit :

    Merci Kevin j’ai trouver ma réponse dans les issues
    Merci encore pour m’avoir débloquer

  7. Inbro dit :

    Salut Florent, merci pour ce tutoriel!
    Mais j’ai un probleme, quand j’essaie d’utiliser cette library et n’importe quel autre library dans mon projet, si je mets
    compile (‘com.github.florent37:materialviewpager:1.0.3@aar’){
    transitive = true
    }
    Quand je mets Run, ca mets :  » Process ‘command ‘C:\Program Files\Java\jdk1.7.0_25\bin\java.exe » finished with non-zero exit value 2  »
    mais si j’inclue :
    {
    exclude module: ‘support-v4’
    }
    comme ca :
    compile (‘com.github.florent37:materialviewpager:1.0.3@aar’){
    transitive = true
    exclude module: ‘support-v4’
    }
    L’erreur disparait mais aprés, quand je lance, l’application va arreter de fonctionner et signale : android.view.InflateException: Binary XML file line #44: Error inflating class android.support.v7.widget.Toolbar

    J’essaie de resoudre ce probleme depuis 5 jours.
    Merci

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Recevez un ebook GRATUIT !

Nous vous avons créé un ebook pour vous remercier de votre fidélité. Retrouvez les 10 librairies indispensables pour Android. Pour cela rien de plus simple vous avez juste à renseigner votre email, vous recevrez un mail de confirmation (pour que l'on vérifie que vous n'êtes pas un robot), il suffira de vous inscrire à la liste et vous recevrez l'Ebook quelques instant après (peut prendre un petit peu de temps car vous êtes beaucoup à le vouloir).
Votre adresse email
Secure and Spam free...