我有什么
我有一个包含5个片段的ViewPager。我希望片段中的一些TextView在用户可见时动画。
我无法使用onResume(),因为左侧和右侧的片段已经创建。我不能使用setUserVisibilityHint(),因为它在onCreateView()之前被调用,所以视图还没有准备好。
那么,只要某个特定片段对用户可见,动画视图的方式应该是什么?
答案 0 :(得分:1)
我不确定,但是如果你在setUserVisibilityHint
之前说onCreateView
调用,那么在这里查看null视图(在视图 - 字段上做引用),如果它不为null,则为它设置动画。同时在onCreateView
中为其设置动画。
答案 1 :(得分:1)
(1)我不能使用onResume(),因为左侧和右侧的片段已经创建。 (2)我无法使用setUserVisibilityHint(),因为它在onCreateView()之前调用,因此视图尚未就绪。
那么,只要某个特定片段对用户可见,动画视图的方式应该是什么?
你在(1)和(2)上是对的。但是,在片段显示在Front上之后, setUserVisibilityHint()
会再次调用 并带有 True 值。但是在首次运行时,要显示的片段会在setUserVisibilityHint()
之前调用onCreateView()
。
SOL:只要特定片段对用户可见,您就应该使用setUserVisibilityHint()
和onResume()
的上述行为来为视图设置动画。
setUserVisibilityHint(boolean isVisibleToUser)
被调用
真正的参数价值。但是由于片段的状态未恢复,我们推迟并让onResume()
处理动画。setUserVisibilityHint(boolean isVisibleToUser)
真正的参考,他们来到显示。在这里你检查一下
片段动画与否动画动画。<强> CODE 强>
a)声明两个全局布尔字段:isAnimated
和isOnDisplay
a.1)将isAnimated
布尔值设置为True;
b)覆盖setUserVisibilityHint(boolean isVisibleToUser)
:
在这里你将isOnDisplay
布尔值设置为isVisibleToUser
并检查片段是否已经过动画并处于恢复状态并且对用户可见。
{ if(!isAnimated && isResumed() && isVisibleToUser) // DO Animation }
c)覆盖onResume()
检查碎片是否已经过动画并且对用户是否可见。
{ if(!isAnimated && isVisibleToUser) // DO Animation }
答案 2 :(得分:1)
我知道这个答案可能有点迟了,但我希望它可以在类似情况下帮助其他人。
您可以使用FragmentViewPager库(我是作者)来处理您面临的问题。它的特点是:
Fragment
个网页实际收到通知
用户可见/不可见FragmentViewPagers
(嵌套)基本用法是:
FragmentViewPager
附加到活动
或片段,就像使用原生ViewPager
FragmentViewPager
的适配器。你的适配器应该继承
com.sbrukhanda.fragmentviewpager.adapters.FragmentPagerAdapter
或
com.sbrukhanda.fragmentviewpager.adapters.FragmentStatePagerAdapter
覆盖托管活动的onResumeFragments()
并致电
FragmentViewPager.notifyPagerVisible()
:
private FragmentViewPager mFragmentsPager;
@Override
public void onResumeFragments() {
super.onResumeFragments();
mFragmentsPager.notifyPagerVisible();
...
}
托管片段和呼叫的或onResume()
FragmentViewPager.notifyPagerVisible()
:
private FragmentViewPager mFragmentsPager;
@Override
public void onResume() {
super.onResume();
mFragmentsPager.notifyPagerVisible();
...
}
覆盖托管活动或片段的onPause()
并致电
FragmentViewPager.notifyPagerInvisible()
:
private FragmentViewPager mFragmentsPager;
@Override
public void onPause() {
super.onPause();
mFragmentsPager.notifyPagerInvisible();
...
}
FragmentVisibilityListener
希望收到其可见性状态的回调如果您希望查看更完整的示例代码,请查看项目sample project。
答案 3 :(得分:0)
如果您想在单个片段中执行此操作,则可以使用isVisible()
为片段转换中的每个片段创建一个监听器。每当片段变得可见时,将调用侦听器,并且每个片段将实现该侦听器并在重写方法中执行您的预期任务。