限制用户在RecyclerView中滚动

限制用户在RecyclerView中滚动,第1张

概述在我的项目中,我使用一个RecyclerView,我只想通过调用LayoutManager的startSmoothScroll()方法进行滚动:private fun next(){ val layoutManager = pager.layoutManager as BattlePageLayoutManager layoutManager

在我的项目中,我使用一个RecyclerVIEw,我只想通过调用LayoutManager的startSmoothScroll()方法进行滚动:

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

我不希望用户能够手动滚动,例如. 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,defStyle);    }    @OverrIDe    public boolean onIntercepttouchEvent(MotionEvent e) {        if(getScrollState() != SCRolL_STATE_IDLE)            return false;        return super.onIntercepttouchEvent(e);    }}
总结

以上是内存溢出为你收集整理的限制用户在RecyclerView中滚动 全部内容,希望文章能够帮你解决限制用户在RecyclerView中滚动 所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1144984.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存