如何知道共享元素转换何时结束
How to know when Shared Element Transition ends
我在活动间隙 Shared Element Transitions
工作。转换工作正常,但我想知道共享元素转换何时结束,以便我可以显示其他内容。
我尝试在 activity 中使用 onSharedElementEnd
in SharedElementCallback
我正在过渡到,但在过渡开始之前被调用。
还有其他回调我可以听吗?
您是否尝试将动画侦听器绑定到 onMapSharedElements
中的共享元素视图? ViewCompat.animate(view)
会给你一个新的或缓存的 ViewPropertyAnimator(Compat)
然后绑定动画监听器应该是微不足道的。不过我没试过。
setEnterSharedElementCallback(new SharedElementCallback() {
@Override
public void onMapSharedElements(List<String> names, Map<String, View> sharedElements) {
super.onMapSharedElements(names, sharedElements);
View keySharedElementView = sharedElements.get("keySharedElement");
if(keySharedElementView != null){
ViewCompat.animate(keySharedElementView).setListener(new ViewPropertyAnimatorListenerAdapter(){
@Override
public void onAnimationEnd(View view) {
super.onAnimationEnd(view);
}
});
}
}
});
如何将 Transition.Listener
添加到共享元素转换?
Transition sharedElementEnterTransition = getWindow().getSharedElementEnterTransition();
sharedElementEnterTransition.addListener(new TransitionListenerAdapter() {
@Override
public void onTransitionEnd(android.support.transition.Transition transition) {
super.onTransitionEnd(transition);
}
});
请在您的 activity 上尝试 onEnterAnimationComplete()
回调。
我打赌这正是您要找的。
@Override
public void onEnterAnimationComplete() {
super.onEnterAnimationComplete();
//your code
}
这是我在片段中所做的:
Transition sharedElementEnterTransition = getActivity().getWindow().getSharedElementEnterTransition();
sharedElementEnterTransition.addListener(new Transition.TransitionListener() {
@Override
public void onTransitionStart(Transition transition) {
}
@Override
public void onTransitionEnd(Transition transition) {
}
@Override
public void onTransitionCancel(Transition transition) {
}
@Override
public void onTransitionPause(Transition transition) {
}
@Override
public void onTransitionResume(Transition transition) {
}
});
尝试在片段 A 而不是 B 上添加 TransitionListener。并使用 android.support.transition.Transition
片段A
val anim = DetailsTransition()
anim.addListener(object : android.support.transition.Transition.TransitionListener
{
override fun onTransitionEnd(transition: android.support.transition.Transition) {
}
override fun onTransitionResume(transition: android.support.transition.Transition) {
}
override fun onTransitionPause(transition: android.support.transition.Transition) {
}
override fun onTransitionCancel(transition: android.support.transition.Transition) {
}
override fun onTransitionStart(transition: android.support.transition.Transition) {
}
})
我在 Kotlin 中使用导航组件努力做到这一点,但设法让它与这个一起工作
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
setAndPostponeEnterAnimation()
_binding = PokemonDetailFragmentBinding.inflate(inflater, container, false)
setInsets()
handleNavigationArgs()
return binding.root
}
private fun setAndPostponeEnterAnimation() {
postponeEnterTransition()
sharedElementEnterTransition = TransitionInflater.from(context)
.inflateTransition(R.transition.shared_element_transition)
addSharedElementListener()
}
private fun addSharedElementListener() {
(sharedElementEnterTransition as TransitionSet).addListener((object :
TransitionListenerAdapter() {
override fun onTransitionEnd(transition: Transition) {
super.onTransitionEnd(transition)
createRevealAnimation()
}
}))
}
这样我就可以在开始新动画之前等待共享过渡完成
我在活动间隙 Shared Element Transitions
工作。转换工作正常,但我想知道共享元素转换何时结束,以便我可以显示其他内容。
我尝试在 activity 中使用 onSharedElementEnd
in SharedElementCallback
我正在过渡到,但在过渡开始之前被调用。
还有其他回调我可以听吗?
您是否尝试将动画侦听器绑定到 onMapSharedElements
中的共享元素视图? ViewCompat.animate(view)
会给你一个新的或缓存的 ViewPropertyAnimator(Compat)
然后绑定动画监听器应该是微不足道的。不过我没试过。
setEnterSharedElementCallback(new SharedElementCallback() {
@Override
public void onMapSharedElements(List<String> names, Map<String, View> sharedElements) {
super.onMapSharedElements(names, sharedElements);
View keySharedElementView = sharedElements.get("keySharedElement");
if(keySharedElementView != null){
ViewCompat.animate(keySharedElementView).setListener(new ViewPropertyAnimatorListenerAdapter(){
@Override
public void onAnimationEnd(View view) {
super.onAnimationEnd(view);
}
});
}
}
});
如何将 Transition.Listener
添加到共享元素转换?
Transition sharedElementEnterTransition = getWindow().getSharedElementEnterTransition();
sharedElementEnterTransition.addListener(new TransitionListenerAdapter() {
@Override
public void onTransitionEnd(android.support.transition.Transition transition) {
super.onTransitionEnd(transition);
}
});
请在您的 activity 上尝试 onEnterAnimationComplete()
回调。
我打赌这正是您要找的。
@Override
public void onEnterAnimationComplete() {
super.onEnterAnimationComplete();
//your code
}
这是我在片段中所做的:
Transition sharedElementEnterTransition = getActivity().getWindow().getSharedElementEnterTransition();
sharedElementEnterTransition.addListener(new Transition.TransitionListener() {
@Override
public void onTransitionStart(Transition transition) {
}
@Override
public void onTransitionEnd(Transition transition) {
}
@Override
public void onTransitionCancel(Transition transition) {
}
@Override
public void onTransitionPause(Transition transition) {
}
@Override
public void onTransitionResume(Transition transition) {
}
});
尝试在片段 A 而不是 B 上添加 TransitionListener。并使用 android.support.transition.Transition
片段A
val anim = DetailsTransition()
anim.addListener(object : android.support.transition.Transition.TransitionListener
{
override fun onTransitionEnd(transition: android.support.transition.Transition) {
}
override fun onTransitionResume(transition: android.support.transition.Transition) {
}
override fun onTransitionPause(transition: android.support.transition.Transition) {
}
override fun onTransitionCancel(transition: android.support.transition.Transition) {
}
override fun onTransitionStart(transition: android.support.transition.Transition) {
}
})
我在 Kotlin 中使用导航组件努力做到这一点,但设法让它与这个一起工作
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
setAndPostponeEnterAnimation()
_binding = PokemonDetailFragmentBinding.inflate(inflater, container, false)
setInsets()
handleNavigationArgs()
return binding.root
}
private fun setAndPostponeEnterAnimation() {
postponeEnterTransition()
sharedElementEnterTransition = TransitionInflater.from(context)
.inflateTransition(R.transition.shared_element_transition)
addSharedElementListener()
}
private fun addSharedElementListener() {
(sharedElementEnterTransition as TransitionSet).addListener((object :
TransitionListenerAdapter() {
override fun onTransitionEnd(transition: Transition) {
super.onTransitionEnd(transition)
createRevealAnimation()
}
}))
}
这样我就可以在开始新动画之前等待共享过渡完成