PtrFrameLayout 嵌套横向滑动RecyclerView,横向滑动冲突问题

三日神 2017-12-02 09:43:55
PtrFrameLayout 上下拉控件刷新空间 里面的item嵌套一个横向滑动的RecyclerView,我重写了RecyclerView但是事件还是有冲突。请各位朋友帮助,有偿解决此问题 Q 416760980
...全文
919 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
jklwan 2018-04-08
  • 打赏
  • 举报
回复
自定义PtrHandler,在RecyclerView横向滑动时,设置不可下拉刷新。大致代码

public abstract class TouchPtrHandler implements PtrHandler{

    /**
     * 手动设置是否可用下拉刷新
     */
    private boolean canScrollUp = true;

    /**
     * 手动设置是否可用下拉刷新
     * @param canScrollUp true则可下拉刷新,false则不可下拉刷新
     */
    public void setCanScrollUp(boolean canScrollUp) {
        this.canScrollUp = canScrollUp;
    }

    @Override
    public boolean checkCanDoRefresh(PtrFrameLayout frame, View content, View header) {
        return canScrollUp && PtrDefaultHandler.checkContentCanBePulledDown(frame, content, header);
    }
}
在RecyclerView的事件中进行判断,如果横向滑动大于竖向滑动时这设置canScrollUp为false,部分代码

        private static final float minXlength = 20;
        private float startX, startY;
        /** 是锁定状态 */
        private boolean isLockStatus = false;
        /** 是否可下拉(纵向下拉距离超过横向滑动距离且纵向下拉超过一定距离才判断为下拉状态,否则判定位滑动状态) */
        private boolean disableScroll = false;
       @Override
        public void dispatchTouchEvent(MotionEvent event) {
            switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN:
                    startX = event.getX();
                    startY = event.getY();
                    break;
                case MotionEvent.ACTION_MOVE:
                    if (!isLockStatus) {
                        float xGap = Math.abs(event.getX() - startX);
                        float yGap = Math.abs(event.getY() - startY);
                        if (xGap > yGap && xGap > minXlength){
                            disableScroll = false;
                            isLockStatus = true;
                        } else if (yGap > xGap && yGap >minXlength) {
                            disableScroll = true;
                            isLockStatus = true;
                        }
                    }
                    final TouchPtrHandler refreshLayout = touchPtrFrameLayout.get();
                    if (refreshLayout != null) {
                        refreshLayout.setCanScrollUp(disableScroll);
                    }
                    if (disableScroll && getParent() != null) {
                        getParent().requestDisallowInterceptTouchEvent(true);
                    }
                    break;
                case MotionEvent.ACTION_CANCEL:
                default:
                    isLockStatus = false;
                    disableScroll = false;
                    final TouchPtrHandler cancelRefreshLayout = touchPtrFrameLayout.get();
                    if (cancelRefreshLayout != null) cancelRefreshLayout.setCanScrollUp(true);
                    break;
            }
        }
Android小码家 2018-04-07
  • 打赏
  • 举报
回复
换框架最实在
r00_a2lBUR 2018-04-06
  • 打赏
  • 举报
回复
什么样的冲突?

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧