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