Dodaję pływające strzałki do mojego HorizontalScrollView
, które pozwolą użytkownikowi wiedzieć, że jest więcej elementów poza bieżącym widokiem.Uzyskaj maksymalną wartość HorizontalScrollView Ilość przewijania
Potrzebuję, jak stwierdzić, czy widok został przewinięty do maksimum. Myślałbyś, że metoda ta dałaby ci to - nie, w moim kodzie daje mi szerokość Widoku. Idź, dlaczego? Oto mój kod - ładne i proste:
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;
}
});
Wyjście z powyższego debugowania:
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 jest maksymalna w tym przypadku)
daje „0” to szerokość w onCreateView po xml została zawyżona. Nawet robienie 'findById' daje szerokość 0 - absolutnie nie ma pojęcia dlaczego. Dobry pomysł! – Graeme
oncreate jest uruchamiany, zanim widoki będą faktycznie rysowane na ekranie. Możesz uzyskać poprawną szerokość tylko po narysowaniu układu. Ive aktualizuje moje unanswer. – blessenm
Świetna odpowiedź, wyjaśnienie i sposób uzyskania faktycznej szerokości widoku po jego ułożeniu! – Graeme