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

4
在我的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个回答

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);

setFillAfter需要设置为true。 - Johann
在这个例子中,你的监听器没有引用anim1。我认为在这种情况下,监听器应该像这样定义:anim1.setAnimationListener(new Animation.AnimationListener() { public void onAnimationStart(Animation animation) {} public void onAnimationRepeat(Animation animation) { } public void onAnimationEnd(Animation animation) {
} });
- Pablo Alfonso

0
以下代码实现了相同的功能:
  TranslateAnimation translateAnimation = new TranslateAnimation(0, 0, 1200, 0);
  translateAnimation.setInterpolator(new LinearInterpolator());
  translateAnimation.setDuration(800);
  translateAnimation.setFillAfter(true);
  rlMapContainer.startAnimation(translateAnimation);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接