gpt4 book ai didi

android - 如何判断一个 NestedScrollView 是否滚动到最后并处于空闲状态?

转载 作者:行者123 更新时间:2023-12-04 23:51:47 40 4
gpt4 key购买 nike

试过了:

NestedScrollView ns =(NestedScrollView) findViewById(R.id.nested_scroll);
ns.setOnScrollChangeListener(new NestedScrollView.OnScrollChangeListener() {
@Override
public void onScrollChange(NestedScrollView v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {

}
});

但是卡住了,有人有想法吗?

只是为了澄清我想要的 - 我希望能够观察滚动状态(如在 RecyclerView 的 addOnScrollListener 中)并且只检查一次,当滚动结束(空闲)时,如果用户滚动到 NestedScrollView 的末尾。

最佳答案

不幸的是,NestedScrollView不支持调度滚动状态的实现,因为它是完全不同的 ScrollView 。简单来说就是FrameLayoutScroller .

通常,当 ViewCompat.canScrollVertically (scrollView, -1) 时到达 ScrollView 的结尾。返回假。对于滚动状态,您需要子类 NestedScrollView并添加您自己的界面,类似于 RecyclerView 之一.您的接口(interface)方法应在以下重写方法中调用:
stopNestedScroll() -> SCROLL_STATE_IDLEstartNestedScroll() -> SCROLL_STATE_DRAGGINGdispatchNestedPreFling() -> SCROLL_STATE_FLINGING
请不要忘记对这些方法进行 super 调用。如果不这样做,您将破坏 NestedScrollView 行为

编辑:

public class NestedScrollingView extends NestedScrollView {
private int mState = RecyclerView.SCROLL_STATE_IDLE;

public interface NestedScrollViewScrollStateListener {
void onNestedScrollViewStateChanged(int state);
}


public void setScrollListener(NestedScrollViewScrollStateListener scrollListener) {
this.mScrollListener = scrollListener;
}

private NestedScrollViewScrollStateListener mScrollListener;

public NestedScrollingView(Context context) {
super(context);
}

public NestedScrollingView(Context context, AttributeSet attrs) {
super(context, attrs);
}

public NestedScrollingView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}

@Override
public void stopNestedScroll() {
super.stopNestedScroll();
dispatchScrollState(RecyclerView.SCROLL_STATE_IDLE);
}

@Override
public boolean onStartNestedScroll(View child, View target, int nestedScrollAxes) {
dispatchScrollState(RecyclerView.SCROLL_STATE_DRAGGING);
return super.onStartNestedScroll(child, target, nestedScrollAxes);
}


@Override
public boolean startNestedScroll(int axes) {
boolean superScroll = super.startNestedScroll(axes);
dispatchScrollState(RecyclerView.SCROLL_STATE_DRAGGING);
return superScroll;
}


private void dispatchScrollState(int state) {
if (mScrollListener != null && mState != state) {
mScrollListener.onNestedScrollViewStateChanged(state);
mState = state;
}
}

}

关于android - 如何判断一个 NestedScrollView 是否滚动到最后并处于空闲状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37667164/

40 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com