android 广告栏效果,叫教你打造一个滑动悬浮置顶的视觉效果,给你的广告栏增加一些特色...

一个滑动悬浮置顶的View,通过自定义ScrollView来实现一个精美的固定悬浮效果

效果图:

1G20Q44913-3052-0.gif

这个特效其实没有那么复杂!

思路:

自定义ListView对头布局进行处理

自定义 RecycleView 貌似很复杂的样子

自定义Behavior 把问题复杂化了

自定义listView + PopuWindows

自定义ViewGroup ,(需要重新onLayout登方法)

自定义Scrollview,对View进行处理

思来考去,其实我们写View的时候以少量的代码打造轮子才是精髓。于是对scrollView进行处理。明显的简单方面!!!

1G20Q44913-6120-1.png

1G20Q44913-GX-2.png

通过广告栏的高度H和view中Y方向锁滑动的距离Y进行比较,从而对view进行处理

1G20Q44913-3047-3.png

1G20Q44913-12J-4.png

关键代码:

重写onTouchEvent获取滑动的距离

/**

* 重写onTouchEvent, 当用户的手在HoveringScrollview上面的时候,

*/

public boolean onTouchEvent(MotionEvent ev) {

//直接将HoveringScrollview滑动的Y方向距离回调给onScroll方法中

if (onScrollListener != null) {

onScrollListener.onMyScroll(lastScrollY = this.getScrollY());

}

switch (ev.getAction()) {

//当用户抬起手的时候, HoveringScrollview可能还在滑动,

// 所以当用户抬起手我们隔6毫秒给handler发送消息,

// 在handler处理 HoveringScrollview滑动的距离

case MotionEvent.ACTION_UP:

handler.sendMessageDelayed(handler.obtainMessage(), 20);

break;

}

return super.onTouchEvent(ev);

};

需要在Handler里面进行

/**

* 用于用户手指离开MyScrollView的时候获取MyScrollView滚动的Y距离,然后回调给onScroll方法中

*/

private Handler handler = new Handler() {

public void handleMessage(android.os.Message msg) {

int scrollY = HoveringScrollview.this.getScrollY();

// 此时的距离和记录下的距离不相等,在隔6毫秒给handler发送消息?

if (lastScrollY != scrollY) {

lastScrollY = scrollY;

handler.sendMessageDelayed(handler.obtainMessage(), 6);

}

if (onScrollListener != null) {

onScrollListener.onMyScroll(scrollY);

}

};

};

重要的在监听回调里面做一些操作:

@Override

public void onMyScroll(int scrollY) {

LogUtils.e("yuyahao","scrollY: " +scrollY);

// TODO Auto-generated method stub

if (scrollY >= searchLayoutTop) {

if (hoveringLayout.getParent() != search01) {

search02.removeView(hoveringLayout);

search01.addView(hoveringLayout);

}

} else {

if (hoveringLayout.getParent() != search02) {

search01.removeView(hoveringLayout);

search02.addView(hoveringLayout);

}

}

}

当广告栏的高亮 大于手指所华东的高度的时候,所指定固定悬浮的View在他本身父布局的View中,否则指定一个顶部的父容器添加在里面即可。

1G20Q44913-3052-0.gif

关于更多

1G20Q44913-E30-6.jpeg

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值