小技巧Android专题安卓工具相关

Android View.getLocalVisibleRect

2019-05-10  本文已影响110人  小胖熊9527

Android开发时有时候需要对View的可见性进行判断,常见的有

public int View.getVisibility();
public boolean View.isShown();

但是这些只能简单的判断这个View是否可见,有时候我们需要更为复杂的功能,比如View的可见区域占其自身的百分比等,常见需求为滚动视频列表时当滑出屏幕外一定百分比时暂停播放等。

View.getLocalVisibleRect(Rect rect)

这个方法会返回View的可视区域的Rect对象
它有如下注意项:

图解

  1. View可见

rect:left=0,top=0,right=990,bottom=150;
因为View可见时是以自己为坐标系计算的,所以left和top都为0,right为自身宽度,bottom为可视区域高度

rect:left=0,top=150,right=990,bottom=300;
因为View可见时是以自己为坐标系计算的,所以left为0,top为滑出ScrollView的高度150,right为自身宽度,bottom为View自身高度

rect:left=0,top=0,right=990,bottom=300;
因为View可见时是以自己为坐标系计算的,所以left和top都为0,right为自身宽度,bottom为View自身高度

2.不可见

rect:left=15,top=2060,right=1005,bottom=2360;
因为View不可见时是以父控件为坐标系计算的
ScrollView的高度为1860,加上View与ScrollView的距离200,所以top=2060
left为View与ScrollView的margin,所以left为15
right和bottom分别为加上View的宽度和高度

rect:left=15,top=-500,right=1005,bottom=-200;

判断View是否在可视区域内

不难看出,当View不在可视区域内时

public boolean isVisible(Rect rect){
        return !(rect.top<0||rect.bottom>getHeight());
}

判断View可视区域占其自身百分比

public int getVisibilePercent(Rect rect){
        return rect.height() * 100 / getHeight();
}

结束语

图是用画图画的,将就看,手动滑稽

上一篇 下一篇

猜你喜欢

热点阅读