je veux juste détecter la position du parchemin nestedscrollview Android en bas, et la fonction pour appeler . mon code est:
scroll.getViewTreeObserver()
.addOnScrollChangedListener(new ViewTreeObserver.OnScrollChangedListener() {
@Override
public void onScrollChanged() {
int totalHeight = scroll.getChildAt(0).getHeight();
int scrollY = scroll.getScrollY();
Log.v("position", "totalHeight=" + totalHeight + "scrollY=" + scrollY);
if (scrollY==totalHeight) {
getPlaylistFromServer("more");
}
}
});
mais totalheight pas le même esprit MAX ScrollY. comment le réparer ?
Définissez setOnScrollChangeListener
dans un NestedScrollView
params pour obtenir
Pour détecter si le décalage est en bas, il est nécessaire d'obtenir la valeur de content height v.getChildAt(0).getMeasuredHeight()
et de comparer le défilement actuel sur la hauteur du parent. Si vous avez la même valeur, cela signifie qu'il a atteint la fin.
Vous pouvez obtenir la hauteur avec la vue parente avec v.getMeasuredHeight()
NestedScrollView scroller = (NestedScrollView) findViewById(R.id.myScroll);
if (scroller != null) {
scroller.setOnScrollChangeListener(new NestedScrollView.OnScrollChangeListener() {
@Override
public void onScrollChange(NestedScrollView v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {
if (scrollY > oldScrollY) {
Log.i(TAG, "Scroll DOWN");
}
if (scrollY < oldScrollY) {
Log.i(TAG, "Scroll UP");
}
if (scrollY == 0) {
Log.i(TAG, "TOP SCROLL");
}
if (scrollY == ( v.getMeasuredHeight() - v.getChildAt(0).getMeasuredHeight() )) {
Log.i(TAG, "BOTTOM SCROLL");
}
}
});
}
Je sais qu'il est tard mais ... essaye comme ça.
scroll.getViewTreeObserver().addOnScrollChangedListener(new ViewTreeObserver.OnScrollChangedListener() {
@Override
public void onScrollChanged() {
View view = (View) scroll.getChildAt(scroll.getChildCount() - 1);
int diff = (view.getBottom() - (scroll.getHeight() + scroll
.getScrollY()));
if (diff == 0) {
getPlaylistFromServer("more");
}
}
});
Bonne codage ..
@Override
public void onScrollChange(NestedScrollView nestedScrollView, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {
if (nestedScrollView.getChildAt(nestedScrollView.getChildCount() - 1) != null) {
if ((scrollY >= (nestedScrollView.getChildAt(nestedScrollView.getChildCount() - 1).getMeasuredHeight() - nestedScrollView.getMeasuredHeight())) &&
scrollY > oldScrollY) {
LogsUtils.INSTANCE.makeLogD(">onScrollChange>", ">>BOTTOm");
}
}
}
Cela a fonctionné pour moi, Source