我有一个列表视图,其中填充了来自 Web 请求的数据。在等待响应时,我在顶部 ( mNoDataLayout
) 上覆盖了另一个视图,其中有一个进度条和其他信息,告诉用户数据即将到来。数据到达后,我想淡出覆盖视图以显示填充的列表视图:
mNoDataLayout.animate().setDuration(300).alpha(0.f);
问题是这个动画并不总是运行。有时有效,有时无效。
我有一个列表视图,其中填充了来自 Web 请求的数据。在等待响应时,我在顶部 ( mNoDataLayout
) 上覆盖了另一个视图,其中有一个进度条和其他信息,告诉用户数据即将到来。数据到达后,我想淡出覆盖视图以显示填充的列表视图:
mNoDataLayout.animate().setDuration(300).alpha(0.f);
问题是这个动画并不总是运行。有时有效,有时无效。
解决方法是将叠加视图的高度设置mNoDataLayout
为屏幕高度。以前我将它设置为match_parent
这意味着当大量列表数据到达时,列表视图可能非常大,这导致覆盖视图非常大。
一旦我将叠加视图设置为更小,alpha 动画就开始工作而无需任何其他更改。
也许 Android 正在默默地杀死非常大的视图上的 alpha 动画,以优化渲染填充率。但由于这些像素无论如何都在屏幕外,这可能意味着它也没有进行任何剪裁/剔除,这看起来很奇怪。
DisplayMetrics displayMetrics = getActivity().getResources().getDisplayMetrics();
ViewGroup.LayoutParams layoutParams = mNoDataLayout.getLayoutParams();
layoutParams.height = displayMetrics.heightPixels;
mNoDataLayout.setLayoutParams(layoutParams);
这是在三星 Galaxy Note 4 上。