gpt4 book ai didi

android - 限制用户在 RecyclerView 中滚动

转载 作者:太空狗 更新时间:2023-10-29 13:02:23 24 4
gpt4 key购买 nike

在我的项目中,我使用了一个 RecyclerView,我只想通过调用 LayoutManager 的 startSmoothScroll() 方法来滚动它:

private fun next(){
val layoutManager = pager.layoutManager as BattlePageLayoutManager
layoutManager.startSmoothScroll(smoothScroller(layoutManager.findFirstVisibleItemPosition() + 1))
layoutManager.finishScroll()
}

我不希望用户能够手动滚动,e。 G。通过滑动。

我已经尝试通过覆盖父 FrameLayout 的 onInterceptTouchEvent() 方法来实现这一点。

    override fun onInterceptTouchEvent(ev: MotionEvent): Boolean {
if (ev.actionMasked == MotionEvent.ACTION_DOWN){
startClickTime = System.currentTimeMillis()
startX = ev.x
startY = ev.y
}
val allowEvent = (System.currentTimeMillis() - startClickTime) < 1000 && (startX-ev.x).absoluteValue < 15 && (startY-ev.y).absoluteValue < 15
return !allowEvent
}

这基本上行得通,但发生了双击 View 用户能够自己滚动的情况。

您有任何其他想法来解决这个问题吗?

最佳答案

您是否尝试覆盖 LayoutManager 中的 canScrollVertically() 方法?

<罢工>
mLayoutManager = new LinearLayoutManager(getActivity()) {
@Override
public boolean canScrollVertically() {
return false;
}
};

<罢工> 编辑:创建您自己的 RecyclerView 实现,它会在执行滚动时禁用触摸事件。然后,您必须更改 xml 文件中的 RecyclerView 类,并使用它更改 Fragment/Activity。

在这里找到一个 Kotlin 的例子

class MyRecyclerView : RecyclerView {
constructor(context: Context) : super(context) {}

constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) {}

constructor(context: Context, attrs: AttributeSet?, defStyle: Int) : super(context, attrs, defStyle) {}

override fun onInterceptTouchEvent(e: MotionEvent): Boolean {
return if (scrollState != RecyclerView.SCROLL_STATE_IDLE) false else super.onInterceptTouchEvent(e)
}
}

在 Java 中

public class MyRecyclerView extends RecyclerView {
public MyRecyclerView(Context context) {
super(context);
}

public MyRecyclerView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}

public MyRecyclerView(Context context, @Nullable AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}

@Override
public boolean onInterceptTouchEvent(MotionEvent e) {
if(getScrollState() != SCROLL_STATE_IDLE)
return false;
return super.onInterceptTouchEvent(e);
}
}

关于android - 限制用户在 RecyclerView 中滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54384577/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com