我通过Android Library项目向Android开发人员提供CustomView。在Library项目中,我想检测这个视图是否被渲染并且对用户可见(可见我的意思是用户查看)。
我想到了一些方法,
我可以覆盖onDraw
或dispatchDraw
方法来检测何时在屏幕上绘制视图,但这并不意味着用户可以查看CustomView。
如果View位于滚动视图内,则ways可以检测用户是否可以看到视图。这是有效的,但是当我明确引用scrollview时,我可以在其上添加scroll事件监听器。我唯一可以访问的是上下文对象和CustomView的初始化引用
因为,我将我的项目作为jar依赖项或jar提供给开发人员,我怎样才能确保我的View对用户可见
答案 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);
}
}