Android scroll up Hide view et scroll down show view effect comme twitter

Comment faire l'effet de défilement comme twitter quand défiler vers le haut cache l'onglet viewpager (accueil, découvrir, activité). Ou l'effet comme le défilement de facebook, tout en faisant défiler vers le haut l'option cacher la vue(statut, photo, checkin) quand faire défiler vers le bas l'option Afficher la vue d'option. N'importe quel lien d'exemple fera l'aide s'il vous plaît.

14
demandé sur NaiveBz 2014-02-17 12:53:01

4 réponses

solution facile:

public abstract class OnScrollObserver implements AbsListView.OnScrollListener {

public abstract void onScrollUp();

public abstract void onScrollDown();

@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
}

int last = 0;
boolean control = true;

@Override
public void onScroll(AbsListView view, int current, int visibles, int total) {
    if (current < last && !control) {
        onScrollUp();
        control = true;
    } else if (current > last && control) {
        onScrollDown();
        control = false;
    }

    last = current;
}

Utilisation:

listView.setOnScrollListener(new OnScrollObserver() {
        @Override
        public void onScrollUp() {

        }

        @Override
        public void onScrollDown() {

        }
    });
5
répondu Vansuita Jr. 2016-03-07 15:11:29
2
répondu Kevin Robatel 2017-05-23 11:46:10

il n'y a pas d'exemple rapide pour cela. Mais ce que vous pouvez faire est de garder la trace de quelle façon vous faites défiler et montrer ou cacher la vue en conséquence

par exemple obtenir la première position visible du ListView garder la trace de ceci et si elle est plus petite alors avant que vous sachiez que vous faites défiler vers le haut de cette façon vous pouvez montrer la vue. Dans le cas où il est plus grand que cacher la vue.

il s'agit d'une approche simple dans le cas où vous voulez avoir plus de précision, vous devez travailler avec onTouchListeners et y coordonnées du mouvement.

http://developer.android.com/reference/android/widget/ListView.html

0
répondu QVDev 2014-02-17 09:34:59

C'est ma propre implémentation: avis:

  • la vue à cacher doit être fixe hauteur
  • nous ne cachons pas la vue par Visiblity.DISPARU
  • Nous sommes le réglage de la hauteur finale à 0px

Voici le code:

    //Your view which you would like to animate
    final RelativeLayout yourViewToHide = (yourViewToHideativeLayout) findViewById(R.id.topWrapper);
    //The initial height of that view
    final int initialViewHeight = yourViewToHide.getLayoutParams().height;
    listView.setOnScrollListener(new AbsListView.OnScrollListener() {
        @Override
        public void onScrollStateChanged(AbsListView view, int scrollState) {

        }

        @Override
        public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
            //Try catch block for NullPointerExceptions
            try{
                //Here is a simple delay. If user scrolls ListView from the top of the screen to the bottom then continue
                if(firstVisibleItem % visibleItemCount == 0) {
                    //Here we initialize the animator, doesn't matter what values You will type in
                    ValueAnimator animator = ValueAnimator.ofInt(0, 1);
                    //if Scrolling up
                    if (fastScrollSB.getProgress() > view.getFirstVisiblePosition()){
                        //Getting actual yourViewToHide params
                        ViewGroup.LayoutParams params = yourViewToHide.getLayoutParams();
                        if (!animator.isRunning()) {
                            //Setting animation from actual value to the initial yourViewToHide height)
                            animator.setIntValues(params.height, initialViewHeight);
                            //Animation duration
                            animator.setDuration(500);
                            //In this listener we update the view
                            animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
                                @Override
                                public void onAnimationUpdate(ValueAnimator animation) {
                                    ViewGroup.LayoutParams params = yourViewToHide.getLayoutParams();
                                    params.height = (int) animation.getAnimatedValue();
                                    yourViewToHide.setLayoutParams(params);
                                }
                            });
                            //Starting the animation
                            animator.start();

                        }
                        System.out.println("Scrolling up!");
                    //If not scrolling
                    } else if (fastScrollSB.getProgress() == view.getFirstVisiblePosition()) {

                        System.out.println("Not Scrolling!");
                    //If scrolling down
                    } else if (fastScrollSB.getProgress() < view.getFirstVisiblePosition()){
                        //Getting actual yourViewToHide params
                        ViewGroup.LayoutParams params = yourViewToHide.getLayoutParams();
                        if (!animator.isRunning()) {
                            //Setting animation from actual value to the target value (here 0, because we're hiding the view)
                            animator.setIntValues(params.height, 0);
                            //Animation duration
                            animator.setDuration(500);
                            //In this listener we update the view
                            animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
                                @Override
                                public void onAnimationUpdate(ValueAnimator animation) {
                                    ViewGroup.LayoutParams params = yourViewToHide.getLayoutParams();
                                    params.height = (int) animation.getAnimatedValue();
                                    yourViewToHide.setLayoutParams(params);
                                }
                            });
                            //Starting the animation
                            animator.start();

                        }
                        System.out.println("Scrolling down!");

                    }
                }
            }catch (Exception e){
                e.printStackTrace();
            }
        }
    });`

j'Espère qu'il s'adapte à vos besoins :)

0
répondu przemek19980102 2016-10-25 18:58:40