Android View.getLocalVisibleRect的使用(View是否在可见区域)

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

public int View.getVisibility();

public boolean View.isShown();

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

View.getLocalVisibleRect(Rect rect)

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

  • 当View可见时,无论是否完全可见,Rect内的坐标所在坐标系的原点为View自己的坐标原点
  • 当View不可见时,Rect内的坐标所在坐标系的原点为View的父控件的坐标原点

图解

  1. View可见
  • 部分可见,底部滑入

     

    底部滑入.png

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

  • 部分可见,顶部滑出

     

    顶部滑出.png

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

  • 完全可见

     

    完全可见.png

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

2.不可见

  • 在底部

     

    底部不可见.png

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的宽度和高度

  • 在顶部

     

    顶部不可见.png

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

判断View是否在可视区域内

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

  • 在顶部,Rect.top <0
  • 在底部,Rect.bottom>View.getHeight
    所以

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

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

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

结束语

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

原文链接:https://www.jianshu.com/p/f131a390eb52

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值