我正在使用 Recyclerview 和 PageSnapHelper 创建图像轮播。
第一个项目不居中,后续项目应该居中,我使用项目装饰器实现了这一点。RecyclerView 位于嵌套滚动视图中。
问题: 滚动不流畅,我覆盖了 findTargetSnapPosition,它在第一次滚动时滚动了 2 个项目。
override fun findTargetSnapPosition(layoutManager: RecyclerView.LayoutManager, velocityX: Int, velocityY: Int): Int {
if (layoutManager !is RecyclerView.SmoothScroller.ScrollVectorProvider) {
return RecyclerView.NO_POSITION
}
val currentView = findSnapView(layoutManager) ?: return RecyclerView.NO_POSITION
val layoutManager = layoutManager as LinearLayoutManager
val position1 = layoutManager.findFirstVisibleItemPosition()
val position2 = layoutManager.findLastVisibleItemPosition()
var currentPosition = layoutManager.getPosition(currentView)
if (velocityX > 500) {
currentPosition = position2
} else if (velocityX < 500) {
currentPosition = position1
}
return if (currentPosition …
Run Code Online (Sandbox Code Playgroud) 当我们设置 viewportFraction 时,视图将居中对齐。
如果 viewportFraction 设置
PageView(
viewportFraction: 0.8
)
Run Code Online (Sandbox Code Playgroud)
但我需要的是从左对齐开始的视图,就像 Playstore 仪表板的工作方式一样。
上面的截图取自 Google Play 商店。
我怎样才能实现这个目标?
在进行编码演练时,我从未找到居中对齐的方法。我刚刚通过复制page_view类创建了一个新的自定义类。
如何在水平 RecyclerView 中捕捉到 LinearSnapHelper() 的特定位置?RecyclerView有一个函数scrolltoposition,它滚动到该位置,但没有将其保持在这个snaphelper的中心。
I am looking for something like below image. So when I set to particular position, it will keep it in center. I dont find anything related to select position for SnapHelper
i find this , but this doesn't help me. Any help would be appreciated.
我正在PagerSnapHelper
水平使用RecyclerView
以实现类似行为的视图寻呼机。
final PagerSnapHelper pagerSnapHelper = new PagerSnapHelper();
pagerSnapHelper.attachToRecyclerView(recyclerView);
它工作得很好,但我希望能够在用户向任一方向更改页面时获得回调。所以像,onSwipeLeft
/onSwipeRight
回调。
我尝试使用findTargetSnapPosition
in PagerSnapHelper
,但这只会给我targetIndex
而不是当前索引。我尝试过这样的事情,但它并不是一直有效。
@Override
public int findTargetSnapPosition(RecyclerView.LayoutManager layoutManager, int velocityX, int velocityY) {
final int targetPos = super.findTargetSnapPosition(layoutManager, velocityX, velocityY);
final View currentView = findSnapView(layoutManager);
final int currentPos = layoutManager.getPosition(currentView);
if (currentPos < targetPos) {
callback.onSwipeRight();
} else if (currentPos > targetPos) {
callback.onSwipeLeft();
}
return targetPos;
}
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法来实现这一目标并始终有效?谢谢!
android android-support-library android-recyclerview pagersnaphelper
我需要创建一个包含全屏视频的列表。我使用 PagerSnapHelper 作为全屏子项目。我有一个 Exoplayer 实例并在滚动时更改视频。视频也会在水平滚动时发生变化。
RecyclerView.OnScrollListener() 方法也在水平滚动时调用。
请建议我如何解决这些问题。
1. 滚动监听器
class SnapOnScrollListener(
private val snapHelper: SnapHelper,
var behavior: Behavior = Behavior.NOTIFY_ON_SCROLL,
var onSnapPositionChangeListener: OnSnapPositionChangeListener? = null
) : RecyclerView.OnScrollListener() {
enum class Behavior {
NOTIFY_ON_SCROLL,
NOTIFY_ON_SCROLL_STATE_IDLE
}
override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
System.out.println("dx.. $dx dy $dy")
if (behavior == Behavior.NOTIFY_ON_SCROLL) {
maybeNotifySnapPositionChange(recyclerView)
System.out.println("dx.. $dx dy $dy snapChange")
}
}
override fun onScrollStateChanged(recyclerView: RecyclerView, newState: Int) {
System.out.println("dx......")
if ( behavior == Behavior.NOTIFY_ON_SCROLL_STATE_IDLE …
Run Code Online (Sandbox Code Playgroud) 我有带有水平滚动的 recyclerview,默认情况下它会使用 LinearSnapHelper 或 PagerSnapHelper 捕捉到项目的中心。我想捕捉到每个项目的左侧。是否可以?