背景
可能存在这样一个需求,滑动列表的时候,需要将正在显示的位置置顶;或者类似京东的购物车,点击降价标签,需要将降价商品推送到最顶部。如果使用scrollview实现,那么需要用两步实现:
1、获取view在屏幕中的位置 ;
2、调用scrollview.smoothScrollTo(x,y) api
实现方式
1、如果view是Scrollview的子view
int position = view.getTop();
scrollview.smoothScrollTo(0,position);
2、view不是Scrollview的子view,会复杂一点
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 需要看情况而定
// 获取在当前窗口内的绝对坐标
View.getLocationInWindow()
// 获取在整个屏幕内的绝对坐标,注意这个值是要从屏幕顶端算起,也就是包括了通知栏的高度。
View.getLocationOnScreen()
// 下面一组是获取相对在它父窗口里的坐标。
View.getLeft() , View.getTop(), View.getBottom(), View.getRight()
View.getLocationInWindow()和 View.getLocationOnScreen()在window占据全部screen时,返回值相同,不同的典型情况是在Dialog中时。当Dialog出现在屏幕中间时,View.getLocationOnScreen()取得的值要比View.getLocationInWindow()取得的值要大。
image.png可能会遇到获取位置信息为0的情况,给个解决方式
android 获取位置信息为0
网友评论