and*_*per 23 android android-listview android-fragments android-viewpager android-design-library
假设我在活动中有这些元素:
我希望与许多应用程序具有相同的行为,滚动时,操作栏将隐藏或显示.
一个完美的例子是Play商店滚动的工作原理.
像这样的东西(但当然在片段中使用ListView):
我找到了" Android-ObservableScrollView "库,它显示了如何为许多类型的滚动视图执行此操作,但它不处理新TabLayout用法的情况(加上它有问题),如新样本所示,喜欢cheesesquare.
在设计库的新API(在"cheesesquare"示例中显示)上,它更加自动化,因此您无需创建如此多的样板来处理滚动以及如何处理它.
像这样的东西:
<android.support.v4.widget.DrawerLayout
<android.support.design.widget.CoordinatorLayout>
<android.support.design.widget.AppBarLayout>
<android.support.v7.widget.Toolbar
app:layout_scrollFlags="scroll|enterAlways"/>
<android.support.design.widget.TabLayout/>
</android.support.design.widget.AppBarLayout>
<android.support.v4.view.ViewPager
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
<android.support.design.widget.FloatingActionButton/>
</android.support.design.widget.CoordinatorLayout>
<android.support.design.widget.NavigationView/>
</android.support.v4.widget.DrawerLayout>
Run Code Online (Sandbox Code Playgroud)
这个雇佣小组承诺小吃店将位于FAB之下,并且动作栏将根据片段的内部RecyclerView自动生成动画(显示/隐藏).
事实上,这似乎只适用于RecyclerView,而不适用于ListView.
由于它们非常复杂,将它们转换为RecyclverViews非常困难.
如何使上述机制也适用于ListViews?
有办法吗?如果是这样,怎么样?
编辑:遗憾的是,谷歌似乎不支持ListView的这种行为,但仅适用于RecyclerView和NestedScrollView(这里写的).
所以我尝试使用" Android-ObservableScrollView "库,但它有很多滚动问题,包括出现问题.
现在我决定给Android-ParallaxHeaderViewPager.任何人都可以告诉我如何使它在当前的情况下工作?它甚至可能吗?
编辑:毕竟我决定转换为RecyclerView.但是,我尝试过的所有示例都显示了一个问题:当停止滚动时,动作栏(甚至可能是FAB)可以保持截断状态,而不是游戏商店,它将被动画化为隐藏/显示.
编辑:当onScrollStateChanged具有IDLE时,我似乎需要使用setExpanded.问题是,如何决定何时扩展以及何时崩溃.
这是一个很好的解决方法,但它仍然与Play商店显示的非常不同:
对于每个片段,调用类似的东西:
recyclerView.addOnScrollListener(new OnScrollListener() {
@Override
public void onScrollStateChanged(final RecyclerView recyclerView, final int newState) {
super.onScrollStateChanged(recyclerView, newState);
((MainActivity) getActivity()).onScrollStateChanged(recyclerView, newState);
}
@Override
public void onScrolled(final RecyclerView recyclerView, final int dx, final int dy) {
super.onScrolled(recyclerView, dx, dy);
((MainActivity) getActivity()).onScrolled(recyclerView, dx,dy);
}
});
Run Code Online (Sandbox Code Playgroud)
对于托管活动:
public void onScrollStateChanged(final RecyclerView recyclerView, final int newState) {
switch (newState) {
case RecyclerView.SCROLL_STATE_IDLE:
mAppBarLayout.setExpanded(mLastDy <= 0, true);
mLastDy = 0;
break;
}
}
public void onScrolled(final RecyclerView recyclerView, final int dx, final int dy) {
mLastDy = dy == 0 ? mLastDy : dy;
}
Run Code Online (Sandbox Code Playgroud)
尽管如此,如果有人知道如何使它运行良好(使用ListView或RecyclerView作为片段),就像Play-Store和其他应用程序一样,请写下来.
新设计API仅适用于新组件。如果该组件要支持旧版本,那么它必须适用于旧版本。
与您的问题相关: 我不知道您是否使用了建议的库。但就我而言,它在这里效果很好。我知道它是一个非常古老的库,你必须使用 listview 。你不能用它来实现recyclerview。但由于我想要非常灵活和流畅的效果,所以我尝试了一下,效果很好。
您还可以使用列表视图滚动来平滑地滚动工具栏,并制作视差效果,如示例中所示。
请参阅此图片了解我为我的应用程序实现的效果。用红色标记是我的应用程序工具栏。
展开后的图像:
折叠时的图像:
如果您不想将列表视图更改为回收器视图,我建议您尝试使用该库来解决与操作栏相关的问题。但如果你想将列表视图更改为回收视图,那么你可以使用新的设计 API 来实现这种效果。
在这种情况下,请告诉我是否可以为您提供更多帮助。
真挚地,
施雷亚什
更新的答案
我认为你需要这样的东西。
如果这是你想要的,那么你应该引用这个库并像这样实现。
请参阅第 1 部分、第 2 部分和第 3 部分以获得类似的效果。
需要帮助请叫我。
| 归档时间: |
|
| 查看次数: |
2766 次 |
| 最近记录: |