滑动冲突学习实例——头部可折叠的RecyclerView

背景:

最近在学习android的事件分发和滑动冲突的解决,所以做了一个头部可折叠的RecyclerView(其实Google的官方控件已经实现了类似的效果,而且还挺好看的),由于对这部分的知识了解得很浅,所以遇到了不少困难。不多说,直接上图。
gif

实现的大致想法:

头部的View(下面都称为HeadView)和RecyclerView放在一个FrameLayout中。HeadView在底层,RecyclerView在表层。当满足一定条件时,RecyclerView的父布局将MotionEvent拦截,然后在自己的onTouchEvent()中处理,将RecyclerView移动到指定位置,那么被遮住的HeadView就露出来了。于是,我只需要自定义一个Layout然后把HeadView和RecyclerView按顺序放入即可。

代码实现:

自定义的DragLayout
public class DragLayout extends FrameLayout {
   

    private class ChildCountException extends RuntimeException{
   
        public ChildCountException(String message){
            super(message);
        }
    }

    private View
            mMovableView = null,//底层的View
            mMainView = null;//表层的View

    private float mTouchY;
    private float mLastY;
    private float mOffsetY ;

    public DragLayout(Context context) {
        super(context);
    }

    public DragLayout(
        Context context,
        AttributeSet attrs) {
        super(context, attrs);
    }

    public DragLayout(
        Context context,
        AttributeSet attrs, 
        int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    protected void onFinishInflate() {
        super.onFinishInflate();
        if(getChildCount() == 2) {
            mMovableView = getChildAt(0);
            mMainView = getChildAt(1);
        }else{
            throw 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值