一招教你打造一個滑動置頂的視覺特效

一個滑動懸浮置頂的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…

技術+職場
技術+職場
相關文章
相關標籤/搜索