android安卓可用于商品展示的锚点定位加联动布局

可用于商品展示的锚点定位加联动布局

项目地址:https://github.com/BitToNet/FeloneHelper/blob/master/README.md#可用于商品展示的锚点定位加联动布局

Sample

演示

这个是网上找的一个项目,修复了一些bug

  1. 自定义的ScrollView会造成他子类里面包含的recycleview加载不全
  2. 从底部滑到顶部后再次跳转回混乱
  3. recycleview充当子类的时候占用父类的touch事件造成卡顿
    原始项目地址:
    https://github.com/taixiang/tabScroll

使用方法

演示代码入口在CActivity里面,能看懂代码就不用看下面了

添加依赖
dependencies {
	api "com.android.support:design:${SUPPORT_VERSION}"
}

1.拷贝自定义widget/CustomScrollView
2.添加布局,在id为ll_top的LinearLayout里加头部
3.拷贝CActivity中四个方法,并在init中处理自己的数据
4.仿写一个AnchorView,在布局R.layout.view_anchor自定义自己的子模块界面

特别注意:
如果子模块中加了recycleview,一定要加这么一条代码
recyclerView.setNestedScrollingEnabled(false);

原理阐述(很简单)

1.自定义NestedScrollView

新建CustomScrollView继承NestedScrollView,通过回调讲两个方法暴露出去
onScrollChanged(滚动监听)
onInterceptTouchEvent(事件分发,监听它的原因是有时候CustomScrollView里面的子view会消费事件,导致CustomScrollView接受不到事件,所以在分发的时候传给CustomScrollView)
代码如下:

public class CustomScrollView extends NestedScrollView {

    public Callbacks mCallbacks;

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

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

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

    public void setCallbacks(Callbacks callbacks) {
        this.mCallbacks = callbacks;
    }

    @Override
    protected void onScrollChanged(int l, int t, int oldl, int oldt) {
        super.onScrollChanged(l, t, oldl, oldt);
        if (mCallbacks != null) {
            mCallbacks.onScrollChanged(l, t, oldl, oldt);
        }
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        if (mCallbacks != null) {
            mCallbacks.ontouch(ev);
        }
        return super.onInterceptTouchEvent(ev);
    }

    //定义接口用于回调
    public interface Callbacks {
        void onScrollChanged(int x, int y, int oldx, int oldy);
        void ontouch(MotionEvent ev);
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值