【问题标题】:Fling smoothly AppBarLayout with NestedScrollView using AppBarLayout.Behavior使用 AppBarLayout.Behavior 将 AppBarLayout 与 NestedScrollView 一起顺利投掷
【发布时间】:2016-03-17 05:27:40
【问题描述】:

我有一个 AppBarLayout 和 NestedScrollView。我想要 NestedScrollView 每当它向下滚动时,AppBarLayout 也应该优雅地展开,而 NestedScrollView 不会在 AppBarLayout 展开之前停止;需要第二次飞行/滚动才能完成。

我检查了stackoverflow,发现这个解决方案非常相关,可以使用。但是如果是NestedScrollView,那就是RecyclerView。在https://stackoverflow.com/a/32454407/3286489

我基本上把代码拿来稍微改了一下,用来检查速度>8000考虑也Fling AppBarLayout如下代码。

public final class FlingBehavior extends AppBarLayout.Behavior {
    private boolean isPositive;

    public FlingBehavior() {
    }

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

    @Override
    public boolean onNestedFling(CoordinatorLayout coordinatorLayout, AppBarLayout child, View target, float velocityX, float velocityY, boolean consumed) {
        if (velocityY > 0 && !isPositive || velocityY < 0 && isPositive) {
            velocityY = velocityY * -1;
        }

        if (target instanceof NestedScrollView && Math.abs(velocityY) > 8000) {
            consumed = false;
        }
        return super.onNestedFling(coordinatorLayout, child, target, velocityX, velocityY, consumed);
    }

    @Override
    public void onNestedPreScroll(CoordinatorLayout coordinatorLayout, AppBarLayout child, View target, int dx, int dy, int[] consumed) {
        super.onNestedPreScroll(coordinatorLayout, child, target, dx, dy, consumed);
        isPositive = dy > 0;
    }
}

这可行,但并不理想。当 NestedScrollView 到达它的滚动顶部时,我只想开始(继续)AppBarLayout 上的 Fling(即返回 consumed = false)。我如何在 onNestedFling 中检查?

谢谢。

【问题讨论】:

  • 您好,您对此有什么解决方案吗???
  • 没有。只是按照我上面的解决方法。也许对问题的评分要求更高会吸引一些注意力来解决这个问题?
  • 是的,我在这里发布了几乎相同的问题..stackoverflow.com/questions/38119661/…

标签: android android-appbarlayout nestedscrollview android-nestedscrollview


【解决方案1】:

你应该检查 NestedScrollView 和 NestedScrollingChild

    if (target instanceof NestedScrollView && Math.abs(velocityY) > 8000) {
        consumed = false;
    }


    if (target instanceof NestedScrollingChild && Math.abs(velocityY) > 8000) {
        consumed = false;
    }

【讨论】:

    【解决方案2】:

    此存储库中的库已解决问题。

    (https://developer.android.com/topic/libraries/support-library/setup.html)

    allprojects {
        repositories {
            jcenter()
            maven {
                url "https://maven.google.com"
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-30
      • 2015-11-26
      • 2017-04-19
      相关资源
      最近更新 更多