我正在使用对象动画师进行翻译动画。在成功翻译后,我试图通过设置新的布局框架来保留动画的位置。但是在动画结束时,当我设置现有的layoutparams而不改变任何边距视图时,保留其位置并完美地工作。
private void IndicatorAnimation(View currentView){
final FrameLayout fl = (FrameLayout)findViewById(R.id.indicator);
RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams) fl.getLayoutParams();
final int[] origin = new int[2];
fl.getLocationInWindow(origin);
final int[] destination = new int[2];
currentView.getLocationInWindow(destination);
ObjectAnimator oa = ObjectAnimator.ofFloat(fl, "translationX", origin[0], destination[0]);
oa.setDuration(300);
oa.start();
oa.addListener(new AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
}
@Override
public void onAnimationRepeat(Animator animation) {
}
@Override
public void onAnimationEnd(Animator animation) {
RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams) fl.getLayoutParams();
fl.setLayoutParams(lp);
}
@Override
public void onAnimationCancel(Animator animation) {
}
});
}
我的问题是怎么可能的?因为动画结束时的getLayoutparams给了我与动画开始之前相同的参数。
答案 0 :(得分:0)
属于[View.TransformationInfo][1]
类的实际属性包括mTranslationX
和mTranslationY
。这基本上是View如何跟踪这些信息,而不是通过更新LayoutParams。
TransformationInfo类不公开,但是(在API 14上)您可以使用View的X,Y等属性来获取此信息。 onAnimationEnd
您可以重置这些值并设置LayoutParams边距以适应(这当然取决于您的布局如何实现此目的)。