检测Android View的可见性

时间:2015-08-10 19:38:24

标签: android

我通过Android Library项目向Android开发人员提供CustomView。在Library项目中,我想检测这个视图是否被渲染并且对用户可见(可见我的意思是用户查看)。

我想到了一些方法,

我可以覆盖onDrawdispatchDraw方法来检测何时在屏幕上绘制视图,但这并不意味着用户可以查看CustomView。

如果View位于滚动视图内,则ways可以检测用户是否可以看到视图。这是有效的,但是当我明确引用scrollview时,我可以在其上添加scroll事件监听器。我唯一可以访问的是上下文对象和CustomView的初始化引用

因为,我将我的项目作为jar依赖项或jar提供给开发人员,我怎样才能确保我的View对用户可见

1 个答案:

答案 0 :(得分:1)

如果您想知道视图何时在根级别可见(未被其他视图覆盖且未翻译出屏幕),则可以使用API​​ View#getGlobalVisibleRect (Rect r)

因此,您仍需要在自定义视图中覆盖onDraw()方法,但需要继续调用getGlobalVisibleRect以获取可见性状态:

public class CustomView extends View {
    Rect tempR = new Rect();

    @Override protected void onDraw(Canvas canvas) {
        boolean isVisible = getGlobalVisibleRect(tempR);
        //here isVisible flag will be true if at least portion of the view is visible to the user
        super.onDraw(canvas);
    }
}