检查视图是否在窗口中可见的最佳方法是什么?

bhu*_*ups 22 android visibility view

检查视图是否在窗口中可见的最佳方法是什么?

我有一个CustomView,它是我的SDK的一部分,任何人都可以将CustomView添加到他们的布局中.我的CustomView会在用户定期看到它时采取一些操作.因此,如果视图对用户不可见,那么它需要停止计时器,当它再次变为可见时,它应该重新启动它的过程.

但遗憾的是,没有某种方法可以检查我的CustomView是否对用户可见或不可见.我可以检查和收听的内容很少:

onVisibilityChange //it is for view's visibility change, and is introduced in new API 8 version so has backward compatibility issue
onWindowVisibilityChange //but my CustomView can be part of a ViewFlipper's Views so it can pose issues
onDetachedFromWindows //this not as useful
onWindowFocusChanged //Again my CustomView can be part of ViewFlipper's views.
Run Code Online (Sandbox Code Playgroud) 所以如果有人遇到过这种问题,请稍微说清楚.

小智 7

onDraw()每次需要绘制视图时调用.当视图不在屏幕上时,则永远不会调用onDraw().当用户看到一小部分视图时,就会调用onDraw().这不是理想的,但我看不到另一个使用的电话,因为我想做同样的事情.记得调用super.onDraw或者视图不会被绘制.小心改变onDraw中的任何内容会导致视图无效,因为这将导致对onDraw的另一次调用.

如果您使用的是列表视图,则只要向您的用户显示列表视图,就可以使用getView.

很明显,该活动onPause()被称为所有视图都被掩盖,并且对用户不可见.也许在父对象上调用invalidate(),如果没有调用ondraw()那么它就不可见了.

  • 我还必须做[这个](http://stackoverflow.com/questions/7781892/own-defined-layout-ondraw-method-not-getting-called/7784369#7784369)才能使这个工作 (2认同)

goR*_*Gon 7

在我的情况下,如果视图可见,则以下代码最有效:

@Override
protected void onWindowVisibilityChanged(int visibility) {
    super.onWindowVisibilityChanged(visibility);
    Log.e(TAG, "is view visible?: " + (visibility == View.VISIBLE));
}
Run Code Online (Sandbox Code Playgroud)