zoukankan      html  css  js  c++  java
  • 一招教你打造一个滑动置顶的视觉特效

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

    效果图:

    效果图

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

    思路:

    • 自定义ListView对头布局进行处理
    • 自定义 RecycleView 貌似很复杂的样子
    • 自定义Behavior 把问题复杂化了
    • 自定义listView + PopuWindows
    • 自定义ViewGroup ,(需要重新onLayout登方法)
    • 自定义Scrollview,对View进行处理

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

     未完全置顶的时候

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

    完全置顶的时候

     初始静态值

    关键代码:

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

    效果图

    关于更多

    2017上半年技术文章集合—184篇文章分类汇总

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

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

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

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

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

    高级UI特效之仿3D翻转切换效果

    手把手教你撸一个上下拉刷新控件

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

    项目Github链接地址

    https://github.com/androidstarjack/MyCorverUpLoadApp

    下载慢?CSDN下载链接:

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

    相信自己,没有做不到的,只有想不到的

    如果你觉得此文对您有所帮助,欢迎入群 QQ交流群 :232203809 微信公众号:终端研发部

    技术+职场

  • 相关阅读:
    NOI2018 退役记
    APIO2018 被屠记
    CTSC2018 被屠记
    SNOI2018 退役记
    O(1) long long a*b%p
    prufer编码
    杜教筛
    GCC卡常
    NOIP2017滚粗记
    UVA 10763 Foreign Exchange
  • 原文地址:https://www.cnblogs.com/codeGoogler/p/7759933.html
Copyright © 2011-2022 走看看