8

对于View有时可见有时不可见的,取决于用户的操作,(留在同一个活动中)什么是可取的?

myView.setVisibility(View.INVISIBLE); // or
myView.setVisibility(View.GONE);

没有其他元素取决于myView的大小或尺寸,因此图形结果是相同的。

由于 INVISIBLE 不会改变视图的尺寸,我想它比 GONE 更可取,因为使用 GONE 我们可能不得不不必要地测量和重绘其他视图。然后重新测量并在myView再次变为可见时重新绘制它们。

4

3 回答 3

20

考虑对测量的影响,您走在正确的轨道上。哪个更有效取决于您更改视图可见性的频率。

例如,如果视图在大部分时间不可见,那么让它GONE可能会更有效,因为系统不会在需要调整屏幕上的其他视图时不必要地测量和布置您的不可见视图。

另一方面,如果视图在可见和不可见之间频繁变化,您可能会获得更好的性能,INVISIBLE因为您可能会避免在每次转换时额外测量/布局。

于 2013-03-19T17:23:36.880 回答
0

我想从我这边添加一些经验:

我有一个动画按钮(使用ValueAnimator)。按钮从一侧移动到另一侧。

此按钮将切换列表的内容。

  • 第一种方法:使用一个列表视图并更改适配器 => 不流畅;“按钮移动动画”跳转到它的结束位置,因为新适配器的加载需要 UI 线程的太多时间。该按钮只有 200 毫秒的时间来执行它的动画,而这个时间完全由ListView.
  • 我添加了第二个ListView,使用ViewSwitcher=> 相同的问题。
  • 因为ViewSwitcher实际上只是将视图设置为VISIBLEGONE ,所以我希望在将列表设置为VISIBLE时重绘会花费很多 UI 线程时间。所以我现在做的是添加一个FrameLayout,把两个ListViews 放在那里并将它设置为INVISIBLE而不是GONE。现在看不到口吃了!

希望这可以帮助某人。

于 2014-08-12T11:30:08.520 回答
-2

我的其他元素不依赖于您的视图的可见性,那么您可以使用它们中的任何一个......两者都将用于相同的目的。

于 2013-03-19T17:20:03.657 回答