Ama*_*iam 24 android android-nestedscrollview
我只是想在底部检测滚动nestedscrollview android的位置,以及调用函数.我的代码是:
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");
}
}
});
Run Code Online (Sandbox Code Playgroud)
但总高度与MAX ScrollY不同.怎么解决?
Web*_*eis 83
设置setOnScrollChangeListener在NestedScrollViewPARAMS获得
要检测偏移是否在底部,有必要获取内容高度的值v.getChildAt(0).getMeasuredHeight()并将当前滚动与父项的高度进行比较,如果您具有相同的值,则表示它已到达结尾.
您可以使用父视图获取高度 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");
}
}
});
}
Run Code Online (Sandbox Code Playgroud)
V-r*_*hit 15
我知道现在已经很晚了..试试这种方式.
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");
}
}
});
Run Code Online (Sandbox Code Playgroud)
快乐编码..
小智 8
Webserve 的回答是正确的,但它需要在 onScrollChange(覆盖方法)中进行一些更改,如下所示:
if (scrollY === v.getChildAt(0).getMeasuredHeight() - v.getMeasuredHeight()) {
// end of the scroll view
}
Run Code Online (Sandbox Code Playgroud)
科特林:
if (scrollY == v.getChildAt(0).measuredHeight - v.measuredHeight) {
// end of the scroll view
}
Run Code Online (Sandbox Code Playgroud)
小智 5
@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");
}
}
}
Run Code Online (Sandbox Code Playgroud)
它对我有用, 来源
这对我有用:
nestedScroll.setOnScrollChangeListener(new NestedScrollView.OnScrollChangeListener() {
@Override
public void onScrollChange(NestedScrollView v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {
if (v.getChildAt(0).getBottom()<=(nestedScroll.getHeight()+scrollY)) {
System.out.println("End of NestedScrollView");
}
}
});
Run Code Online (Sandbox Code Playgroud)
基本上,我们在nestedScrollView中添加许多视图,但以单一视图的形式将它们包装在一起。因此,childCount 将始终为 1,其索引为 0。因此,用于v.getChildAt(0).getBottom()确定其底部。现在,nestedScroll.getHeight()返回以像素为单位的高度,并且 ,scrollY将返回当前垂直原点。因此,每次到达 NestedScrollView 的底部时,上述条件都会成立。
if (v.getChildAt(0).getBottom()==(nestedScroll.getHeight()+nestedScroll.getScrollY()))
Run Code Online (Sandbox Code Playgroud)
这只能工作一段时间......因此,不要以这种方式使用它。
| 归档时间: |
|
| 查看次数: |
32856 次 |
| 最近记录: |