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

举报
孔皮皮 发表于 2019/12/16 19:56:50 2019/12/16
【摘要】 一个滑动悬浮置顶的View,通过自定义ScrollView来实现一个精美的固定悬浮效果效果图:这个特效其实没有那么复杂!思路:自定义ListView对头布局进行处理自定义 RecycleView 貌似很复杂的样子自定义Behavior 把问题复杂化了自定义listView + PopuWindows自定义ViewGroup ,(需要重新onLayout登方法)自定义Scrollview,对V...

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

效果图:


strip

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

思路:

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

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

  • 自定义Behavior 把问题复杂化了

  • 自定义listView + PopuWindows

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

  • 自定义Scrollview,对View进行处理

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


1240


1240

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


1240


1240

关键代码:

重写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中,否则指定一个顶部的父容器添加在里面即可。


strip

关于更多

高级UI特效仿直播点赞效果—一个优美炫酷的点赞动画

一个实现录音和播放的小案例

NDK项目实战—高仿360手机助手之卸载监听

玩转自定义柱形图—教你玩一把牛逼的

玩转雷达效果—一个炫酷的仿雷达扩散效果竟如此简单

代码并没有很多,需要的同学可以下载github Demo体验和学习。

项目Github链接地址

https://github.com/androidstarjack/MyCorverUpLoadApp

下载慢?CSDN下载链接:

http://download.csdn.net/download/androidstarjack/10030270


本文转载自异步社区

原文链接:https://www.epubit.com/articleDetails?id=NC7E3EF95C4900001E5B7164719B21C97


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。