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.
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() {
}
});
EDIT: le mieux, vous avez cette bibliothèque https://github.com/ksoichiro/Android-ObservableScrollView
Vous pouvez regarder ce https://github.com/LarsWerkman/QuickReturnListView
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
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 :)