我正在做翻译动画使用对象动画。翻译成功后,我尝试使用设置新的layoutparams来保留动画的位置。但在动画结束时,当我设置现有的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给了我与动画开始前相同的参数。
发布于 2014-01-05 05:59:54
存在属于[View.TransformationInfo][1]类的实际属性,包括mTranslationX和mTranslationY。这基本上就是视图跟踪这些信息的方式,而不是通过更新LayoutParams。
TransformationInfo类不是公开可用的,但是(在API14上)您可以使用视图的X、Y等属性来获取此信息。你可以重置这些值并设置LayoutParams边距来适应(这当然取决于你的布局如何实现)。
https://stackoverflow.com/questions/20926955
复制相似问题