背景
可能存在這樣一個(gè)需求犁享,滑動列表的時(shí)候余素,需要將正在顯示的位置置頂;或者類似京東的購物車炊昆,點(diǎn)擊降價(jià)標(biāo)簽桨吊,需要將降價(jià)商品推送到最頂部威根。如果使用scrollview實(shí)現(xiàn),那么需要用兩步實(shí)現(xiàn):
1视乐、獲取view在屏幕中的位置 洛搀;
2、調(diào)用scrollview.smoothScrollTo(x佑淀,y) api
實(shí)現(xiàn)方式
1留美、如果view是Scrollview的子view
int position = view.getTop();
scrollview.smoothScrollTo(0,position);
2、view不是Scrollview的子view伸刃,會復(fù)雜一點(diǎn)
int[] location = new int[2];
view.getLocationInWindow(location); `
int position = location[1] - yourTitle.getHeight();
if (position< 0) {
position= 0;
}
scrollview.smoothScrollTo(0,position);
注意使用 getLocationInWindow 還是 getLocationOnScreen 需要看情況而定
// 獲取在當(dāng)前窗口內(nèi)的絕對坐標(biāo)
View.getLocationInWindow()
// 獲取在整個(gè)屏幕內(nèi)的絕對坐標(biāo)谎砾,注意這個(gè)值是要從屏幕頂端算起,也就是包括了通知欄的高度捧颅。
View.getLocationOnScreen()
// 下面一組是獲取相對在它父窗口里的坐標(biāo)景图。
View.getLeft() , View.getTop(), View.getBottom(), View.getRight()
View.getLocationInWindow()和 View.getLocationOnScreen()在window占據(jù)全部screen時(shí),返回值相同碉哑,不同的典型情況是在Dialog中時(shí)挚币。當(dāng)Dialog出現(xiàn)在屏幕中間時(shí),View.getLocationOnScreen()取得的值要比View.getLocationInWindow()取得的值要大扣典。
可能會遇到獲取位置信息為0的情況妆毕,給個(gè)解決方式
android 獲取位置信息為0