以编程方式更改动画的起始位置

时间:2015-04-17 07:08:51

标签: android animation

在我的Android应用中,我使用动画来滑动视图。我的资源文件如下所示:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
     android:interpolator="@android:anim/linear_interpolator">

    <translate
        android:fromYDelta="1300"
        android:duration="700"/>
</set>

在代码中我执行这样的动画:

RelativeLayout rlMapContainer = (RelativeLayout) getActivity().findViewById(R.id.rlMapContainer);
Animation animation = AnimationUtils.loadAnimation(context, R.anim.map_anim_up);
rlMapContainer.startAnimation(animation);

我想将fromYDelta更改为我在运行时确定的值。如何更改此值?

2 个答案:

答案 0 :(得分:1)

您可以尝试以编程方式为视图设置动画,而不是使用xml文件。 检查我的代码,它可以帮助你制作动画。

TranslateAnimation anim1 = new TranslateAnimation(0, 0,
                    500, 0);
            anim1.setDuration(500);
            anim1.setFillAfter(false);

            layTransparent.animate().setDuration(500)
                    .setListener(new AnimatorListener() {

                        @Override
                        public void onAnimationStart(Animator animation) {

                        }

                        @Override
                        public void onAnimationRepeat(Animator animation) {
                            // TODO Auto-generated method stub

                        }

                        @Override
                        public void onAnimationEnd(Animator animation) {
                            // TODO Auto-generated method stub

                        }

                        @Override
                        public void onAnimationCancel(Animator arg0) {
                            // TODO Auto-generated method stub
                        }
                    });

            layTransparent.startAnimation(anim1);

答案 1 :(得分:0)

以下代码完成了同样的事情:

  TranslateAnimation translateAnimation = new TranslateAnimation(0, 0, 1200, 0);
  translateAnimation.setInterpolator(new LinearInterpolator());
  translateAnimation.setDuration(800);
  translateAnimation.setFillAfter(true);
  rlMapContainer.startAnimation(translateAnimation);