J'ajoute des flèches flottantes à mon HorizontalScrollView
qui indiquera à l'utilisateur qu'il y a plus d'éléments en dehors de la vue actuelle.Obtenez le montant maximum de défilement horizontalScrollView
Ce dont j'ai besoin, c'est de savoir si la vue a été déplacée au maximum. Vous auriez pensé que la méthode getMaxScrollAmount()
vous donnerait ceci - ce n'est pas le cas, dans mon code cela me donne la largeur de la vue. Allez comprendre pourquoi. Voici mon code - agréable et simple:
final ImageView leftArrow = (ImageView) toReturn.findViewById(R.id.leftArrow);
final ImageView rightArrow = (ImageView) toReturn.findViewById(R.id.rightArrow);
final HorizontalScrollView scrollView = (HorizontalScrollView) toReturn.findViewById(R.id.actionBarHoriztonalScroll);
final GestureDetector gd = new GestureDetector(new SimpleOnGestureListener() {
@Override
public boolean onScroll(MotionEvent e1,
MotionEvent e2,
float distanceX,
float distanceY) {
if(scrollView.getScrollX() == 0) {
leftArrow.setVisibility(View.GONE);
} else {
leftArrow.setVisibility(View.VISIBLE);
}
if(scrollView.getScrollX() == scrollView.getMaxScrollAmount() ||
scrollView.getMaxScrollAmount() == 0) {
rightArrow.setVisibility(View.GONE);
} else {
rightArrow.setVisibility(View.VISIBLE);
}
Log.v(ClientDetailsFragment.class.getSimpleName(), "max: " + scrollView.getMaxScrollAmount() +
"current: " + scrollView.getScrollX());
return super.onScroll(e1, e2, distanceX, distanceY);
}
});
scrollView.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View arg0, MotionEvent ev) {
gd.onTouchEvent(ev);
return false;
}
});
sortie de la mise au point ci-dessus:
10-03 14:36:16.343: VERBOSE/(20508): max: 240 current: 126
10-03 14:36:16.363: VERBOSE/(20508): max: 240 current: 127
10-03 14:36:16.386: VERBOSE/(20508): max: 240 current: 132
10-03 14:36:16.398: VERBOSE/(20508): max: 240 current: 143
10-03 14:36:16.417: VERBOSE/(20508): max: 240 current: 149
10-03 14:36:16.433: VERBOSE/(20508): max: 240 current: 152
10-03 14:36:16.449: VERBOSE/(20508): max: 240 current: 152
10-03 14:36:16.468: VERBOSE/(20508): max: 240 current: 152
(152 est le maximum dans ce cas)
Donne « 0 » pour sa largeur onCreateView après le code XML a été gonflé. Même faire un 'findById' donne une largeur de 0 - absolument aucune idée pourquoi. Bonne idée cependant! – Graeme
oncreate est déclenché avant que les vues ne soient réellement dessinées à l'écran. Vous ne pouvez obtenir la largeur correcte qu'après que la mise en page a été dessinée. J'ai mis à jour ma réponse. – blessenm
Grande réponse, explication et façon d'obtenir la largeur réelle d'une vue après qu'elle soit disposée! – Graeme