dr_*_*lli 10 android android-animation
我正在使用此处TransitionManager.beginDelayedTransition概述的
动画在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);
}
Run Code Online (Sandbox Code Playgroud)
我已经在这里进行了几个小时的搜索并梳理了TransitionManager代码,但无法看到如何检测更改.我更喜欢能够在CollageCanvasAperture中检测到动画结束,但是看不到要应用的任何相关侦听器.
我想我可以在执行动画之前提供目标LayoutParams的视图,然后视图可以监听大小和位置的变化,直到它们匹配......?
dr_*_*lli 22
因此事实证明,为这些"自动"转换添加侦听器非常简单.
而不是使用:TransitionManager.beginDelayedTransition(mApertureGroup);
您需要确定在调用beginDelayedTransition和调用时正在使用哪个自动Transition TransitionManager.go().
我的视图转换使用ChangeBounds Transition.一旦知道,我所要做的就是:
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);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4666 次 |
| 最近记录: |