如何在滚动时展开和折叠位于RecyclerView上方的布局?

huangapple 未分类评论59阅读模式
英文:

How to expand and collapse a layout above recyclerView when scrolling?

问题

我有一个应用程序,其中有一个带有产品的回收站,以及在上方有另一个带有类别的布局。
我希望在滚动回收站时展开和折叠类别,就像这个视频演示的那样:

如何在滚动时展开和折叠位于RecyclerView上方的布局?

我创建了一个监听滚动的类:

public abstract class MyRecyclerScroll extends RecyclerView.OnScrollListener {

    final float MINIMUM = 200;
    int scrollDist = 0;
    boolean isVisible = true;
    @Override
    public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
        super.onScrolled(recyclerView, dx, dy);

        if (isVisible && scrollDist > MINIMUM) {
            hide();
            scrollDist = 0;
            isVisible = false;
        }
        else if (!isVisible && scrollDist < -MINIMUM) {
            show();
            scrollDist = 0;
            isVisible = true;
        }

        if ((isVisible && dy > 0) || (!isVisible && dy < 0)) {
            scrollDist += dy;
        }
    }

    public abstract void show();
    public abstract void hide();
}

然后我像这样在 recycler.setOnScrollListener 上使用它:

rec.setOnScrollListener(new MyRecyclerScroll() {
    @Override
    public void show() {
    }

    @Override
    public void hide() {
    }
});
英文:

I have an app which have a recycler with product and anothe layout above with categories
I want to expand and collapse the categories when the recycler scroll like this video

如何在滚动时展开和折叠位于RecyclerView上方的布局?

I made a class that listens to scroll:

public abstract class MyRecyclerScroll extends RecyclerView.OnScrollListener {

    final float MINIMUM = 200;
    int scrollDist = 0;
    boolean isVisible = true;
    @Override
    public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
        super.onScrolled(recyclerView, dx, dy);

        if (isVisible &amp;&amp; scrollDist &gt; MINIMUM) {
            hide();
            scrollDist = 0;
            isVisible = false;
        }
        else if (!isVisible &amp;&amp; scrollDist &lt; -MINIMUM) {
            show();
            scrollDist = 0;
            isVisible = true;
        }

        if ((isVisible &amp;&amp; dy &gt; 0) || (!isVisible &amp;&amp; dy &lt; 0)) {
            scrollDist += dy;
        }
    }

    public abstract void show();
    public abstract void hide();
}

Then I used it on recycler.setOnScrollListener like this:

rec.setOnScrollListener(new MyRecyclerScroll() {
    @Override
    public void show() {
    }

    @Override
    public void hide() {
    }
});

huangapple
  • 本文由 发表于 2020年7月27日 18:44:05
  • 转载请务必保留本文链接:https://java.coder-hub.com/63113674.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定