一招教你打造一个滑动置顶的视觉特效

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

效果图:git

效果图
效果图

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

思路:bash

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

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

未彻底置顶的时候
未彻底置顶的时候

经过广告栏的高度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里面进行ui

/**
* 用于用户手指离开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);
        }
    };
};复制代码

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

@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中,不然指定一个顶部的父容器添加在里面便可。

效果图
效果图

关于更多

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

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

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

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

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

代码并无不少,须要的同窗能够下载github Demo体验和学习。

项目Github连接地址

github.com/androidstar…

下载慢?CSDN下载连接:

download.csdn.net/download/an…

技术+职场
技术+职场
相关文章
相关标签/搜索