Android 滾動懸停需求的簡單實現

Android 滾動懸停需求的簡單實現

有一種需求,須要某些按鈕或者信息欄,隨着界面的滾動,懸停在屏幕上方,即不隨着其餘信息一塊兒隱藏,對於這種需求,有一個簡單的實現,就是設置兩個同樣的控件,而後判斷原來隨着滾動的那個控件的上邊緣是否被隱藏了,若是是,則在懸浮位置顯示第二個控件(又或者只用一個控件,第一個隱藏了自後就把它從滾動的容器中remove出來,而後添加到新的位置去)。ide

下面來簡單展現下實現方法:this

首先實現一個監聽容器類,ListeningScrollViewcode

public class ListeningScrollView extends ScrollView {
    private OnScrollChangedListener onScrollChangedListener;

    public ListeningScrollView(Context context) {
        super(context);
    }

    public ListeningScrollView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public ListeningScrollView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    public interface OnScrollChangedListener {
        public void onScrollChanged(int x, int y, int oldxX, int oldY);
    }

    /**
     * 
     * @param onScrollChangedListener
     */
    public void setOnScrollListener(OnScrollChangedListener onScrollChangedListener) {
        this.onScrollChangedListener = onScrollChangedListener;
    }

    @Override
    protected void onScrollChanged(int x, int y, int oldX, int oldY) {
        super.onScrollChanged(x, y, oldX, oldY);
        if (onScrollChangedListener != null) {
            onScrollChangedListener.onScrollChanged(x, y, oldX, oldY);
        }
    }
}

這個類爲scrollView加了一個OnScrollChangedListener 方便處理滾動變化時的事件事件

具體使用時就很簡單了rem

final ListeningScrollView vScroll = (ListeningScrollView) findViewById(R.id.scrollview);
vScroll.setOnScrollListener(new OnScrollChangedListener() {
        @Override
        public void onScrollChanged(int x, int y, int oldxX, int oldY) {
        vLayoutFloat.setVisibility(y > vLayout.getTop() ?View.VISIBLE : View.GONE);
    }
});

兩個layout功能同樣,這裏是當vLayout的上邊緣,小於scrollview的上邊緣,即被隱藏的狀況下,懸浮的vLayoutfloat則顯示出來,當vLayout滾後回來後,又隱藏它。get


文章爲原創,轉載請註明出處。it

相關文章
相關標籤/搜索