1. 程式人生 > >叫教你打造一個滑動懸浮置頂的視覺效果,給你的廣告欄增加一些特色

叫教你打造一個滑動懸浮置頂的視覺效果,給你的廣告欄增加一些特色

一個滑動懸浮置頂的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裡面進行 <div class="se-preview-section-delimiter"></div>

/**
* 用於使用者手指離開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);
    }
};

};


重要的在監聽回撥裡面做一些操作:





<div class="se-preview-section-delimiter"></div>
@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中,否則指定一個頂部的父容器新增在裡面即可。

效果圖

關於更多

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

如果你覺得此文對您有所幫助,歡迎入群 QQ交流群 :232203809
微信公眾號:終端研發部

技術+職場