【发布时间】:2015-11-26 07:05:30
【问题描述】:
我尝试为回收器视图添加滚动侦听器并制定了一些逻辑,但我无法一次滑动一个项目。我在互联网上进行了一些搜索,但我得到了一些具有自定义回收器视图的第三方库。我们可以在回收站视图中一次实现一项滑动吗?如果是请告诉如何? 像这样一次滑动一个项目image。
【问题讨论】:
标签: android android-fragments android-viewpager android-recyclerview
我尝试为回收器视图添加滚动侦听器并制定了一些逻辑,但我无法一次滑动一个项目。我在互联网上进行了一些搜索,但我得到了一些具有自定义回收器视图的第三方库。我们可以在回收站视图中一次实现一项滑动吗?如果是请告诉如何? 像这样一次滑动一个项目image。
【问题讨论】:
标签: android android-fragments android-viewpager android-recyclerview
这软化了项目之间的移动:
public class SnapHelperOneByOne extends LinearSnapHelper {
@Override
public int findTargetSnapPosition(RecyclerView.LayoutManager layoutManager, int velocityX, int velocityY) {
if (!(layoutManager instanceof RecyclerView.SmoothScroller.ScrollVectorProvider)) {
return RecyclerView.NO_POSITION;
}
final View currentView = findSnapView(layoutManager);
if (currentView == null) {
return RecyclerView.NO_POSITION;
}
LinearLayoutManager myLayoutManager = (LinearLayoutManager) layoutManager;
int position1 = myLayoutManager.findFirstVisibleItemPosition();
int position2 = myLayoutManager.findLastVisibleItemPosition();
int currentPosition = layoutManager.getPosition(currentView);
if (velocityX > 400) {
currentPosition = position2;
} else if (velocityX < 400) {
currentPosition = position1;
}
if (currentPosition == RecyclerView.NO_POSITION) {
return RecyclerView.NO_POSITION;
}
return currentPosition;
}
}
例子:
LinearSnapHelper linearSnapHelper = new SnapHelperOneByOne();
linearSnapHelper.attachToRecyclerView(recyclerView);
【讨论】:
太晚了,我知道。
有一种非常简单的方法可以通过使用自定义 SnapHelper 来准确获取请求的滚动行为。
通过覆盖标准的 SnapHelper (android.support.v7.widget.LinearSnapHelper) 创建您自己的 SnapHelper。
public class SnapHelperOneByOne extends LinearSnapHelper{
@Override
public int findTargetSnapPosition(RecyclerView.LayoutManager layoutManager, int velocityX, int velocityY){
if (!(layoutManager instanceof RecyclerView.SmoothScroller.ScrollVectorProvider)) {
return RecyclerView.NO_POSITION;
}
final View currentView = findSnapView(layoutManager);
if( currentView == null ){
return RecyclerView.NO_POSITION;
}
final int currentPosition = layoutManager.getPosition(currentView);
if (currentPosition == RecyclerView.NO_POSITION) {
return RecyclerView.NO_POSITION;
}
return currentPosition;
}
}
这基本上是标准方法,但没有添加由滚动速度计算的跳转计数器。
如果您快速而长时间地滑动,下一个(或上一个)视图将居中(显示)。
如果您缓慢而短地滑动,当前居中的视图会在释放后保持居中。
我希望这个答案仍然可以帮助任何人。
【讨论】:
PagerSnapHelper() 而不是LinearShapHelper()
https://github.com/googlesamples/android-HorizontalPaging/
这包含与您在图片中显示的内容类似的链接。如果您还需要其他内容,请告诉我,我会链接相关库。
ViewPager 和 recyclerView 的主要区别在于,在 recyclerView 中你是在许多项目之间切换,而在 ViewPager 中你是在许多片段或独立页面之间切换。
我看到你正在使用这个https://github.com/lsjwzh/RecyclerViewPager,你有什么特别的用例吗?
【讨论】: