我正在为活动返回到调用活动时编写自定义返回转换。转换将整理活动的内容淡入到调用活动的最终位置。但是,当该动画完成时,调用活动的共享元素只会闪烁到最终位置。
以下是我的转换createAnimator
的一个片段:
@Override
public Animator createAnimator(ViewGroup sceneRoot, TransitionValues startValues,
TransitionValues endValues) {
if (startValues == null || endValues == null) {
return null;
}
final ViewGroup startView = (ViewGroup) startValues.view;
final int startHeight = (int) startValues.values.get(PROPERTY_HEIGHT);
final int startWidth = (int) startValues.values.get(PROPERTY_WIDTH);
// Position at the original location
final int widthSpec = View.MeasureSpec.makeMeasureSpec(startWidth,
View.MeasureSpec.EXACTLY);
final int heightSpec = View.MeasureSpec.makeMeasureSpec(startHeight,
View.MeasureSpec.EXACTLY);
startView.measure(widthSpec, heightSpec);
startView.layout(0, 0, startWidth, startHeight);
final ObjectAnimator animator = ObjectAnimator.ofFloat(startView, "dummyValue", 0f, 1f);
animator.addUpdateListener(animation -> {
// Shift start view into end view's frame and fade out at the same time
});
return animator;
}
我似乎无法找到一种方法来告诉视图在重新进入过渡时同时淡入。在上面的动画师中,startValues.view
和endValues.view
似乎对应于同一个对象(这就是我必须将起始视图重新定位到其原始位置的原因)。
答案 0 :(得分:0)
为什么你不使用回调? setExitSharedElementCallback 和 setEnterSharedElementCallback 在setEnterShare中执行您的视图动画...第二个活动的回调...希望这可以帮助您。
setExitSharedElementCallback(new SharedElementCallback() {
@Override
public void onSharedElementEnd(List<String> sharedElementNames, List<View> sharedElements, List<View> sharedElementSnapshots) {
super.onSharedElementEnd(sharedElementNames, sharedElements, sharedElementSnapshots);
}
});