Android:我可以使用 TransitionManager.beginDelayedTransition 收听动画更新吗?
Android: Can I listen for animation updates using TransitionManager.beginDelayedTransition?
我正在使用 TransitionManager.beginDelayedTransition
概述 here
为两个视图在 RelativeLayout 中交换位置设置动画。我通过简单地交换两个视图的 RelativeLayout.LayoutParams
来做到这一点。
我的问题是如何监视由 TransitionManager
自动创建和执行的动画,而不必创建我自己的自定义过渡。我需要检测动画何时结束,以便我可以更改已交换的视图。
下面是交换两个视图的方法。 CollageCanvasAperture 是 View
的扩展,而 mApertureGroup 是保存这些视图的 RelativeLayout。
private void shuffle(int fromApertureInd, int toApertureInd) {
final CollageCanvasAperture fromV = (CollageCanvasAperture) mApertureGroup.getChildAt(fromApertureInd);
final CollageCanvasAperture toV = (CollageCanvasAperture) mApertureGroup.getChildAt(toApertureInd);
if (null == fromV || null == toV) {
return;
}
TransitionManager.beginDelayedTransition(mApertureGroup);
RelativeLayout.LayoutParams fromLP = (RelativeLayout.LayoutParams) fromV.getLayoutParams();
RelativeLayout.LayoutParams toLP = (RelativeLayout.LayoutParams) toV.getLayoutParams();
fromV.setLayoutParams(toLP);
toV.setLayoutParams(fromLP);
}
我已经在这里搜索了几个小时并梳理了 TransitionManager
代码,但看不到如何检测更改。我希望能够在 CollageCanvasAperture 中检测到动画结束,但看不到要应用的任何相关侦听器。
我想我可以在执行动画之前为视图提供目标 LayoutParams,然后视图可以监听大小和位置变化,直到它们匹配...?
所以事实证明,向这些 'automatic' 转换添加侦听器非常简单。
而不是使用:TransitionManager.beginDelayedTransition(mApertureGroup);
当您调用 beginDelayedTransition
并调用 TransitionManager.go()
时,您需要确定正在使用哪个自动转换。
我的视图转换使用的是 ChangeBounds 转换。一旦知道我所要做的就是:
ChangeBounds mySwapTransition = new ChangeBounds();
mySwapTransition.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) { }
});
TransitionManager.go(new Scene(mApertureGroup), mySwapTransition);
我正在使用 TransitionManager.beginDelayedTransition
概述 here
为两个视图在 RelativeLayout 中交换位置设置动画。我通过简单地交换两个视图的 RelativeLayout.LayoutParams
来做到这一点。
我的问题是如何监视由 TransitionManager
自动创建和执行的动画,而不必创建我自己的自定义过渡。我需要检测动画何时结束,以便我可以更改已交换的视图。
下面是交换两个视图的方法。 CollageCanvasAperture 是 View
的扩展,而 mApertureGroup 是保存这些视图的 RelativeLayout。
private void shuffle(int fromApertureInd, int toApertureInd) {
final CollageCanvasAperture fromV = (CollageCanvasAperture) mApertureGroup.getChildAt(fromApertureInd);
final CollageCanvasAperture toV = (CollageCanvasAperture) mApertureGroup.getChildAt(toApertureInd);
if (null == fromV || null == toV) {
return;
}
TransitionManager.beginDelayedTransition(mApertureGroup);
RelativeLayout.LayoutParams fromLP = (RelativeLayout.LayoutParams) fromV.getLayoutParams();
RelativeLayout.LayoutParams toLP = (RelativeLayout.LayoutParams) toV.getLayoutParams();
fromV.setLayoutParams(toLP);
toV.setLayoutParams(fromLP);
}
我已经在这里搜索了几个小时并梳理了 TransitionManager
代码,但看不到如何检测更改。我希望能够在 CollageCanvasAperture 中检测到动画结束,但看不到要应用的任何相关侦听器。
我想我可以在执行动画之前为视图提供目标 LayoutParams,然后视图可以监听大小和位置变化,直到它们匹配...?
所以事实证明,向这些 'automatic' 转换添加侦听器非常简单。
而不是使用:TransitionManager.beginDelayedTransition(mApertureGroup);
当您调用 beginDelayedTransition
并调用 TransitionManager.go()
时,您需要确定正在使用哪个自动转换。
我的视图转换使用的是 ChangeBounds 转换。一旦知道我所要做的就是:
ChangeBounds mySwapTransition = new ChangeBounds();
mySwapTransition.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) { }
});
TransitionManager.go(new Scene(mApertureGroup), mySwapTransition);