ObjectAnimator保留动画视图

时间:2014-01-04 21:26:06

标签: android android-animation

我正在使用对象动画师进行翻译动画。在成功翻译后,我试图通过设置新的布局框架来保留动画的位置。但是在动画结束时,当我设置现有的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给了我与动画开始之前相同的参数。

1 个答案:

答案 0 :(得分:0)

属于[View.TransformationInfo][1]类的实际属性包括mTranslationXmTranslationY。这基本上是View如何跟踪这些信息,而不是通过更新LayoutParams。

TransformationInfo类不公开,但是(在API 14上)您可以使用View的X,Y等属性来获取此信息。 onAnimationEnd您可以重置这些值并设置LayoutParams边距以适应(这当然取决于您的布局如何实现此目的)。