如何通过编程实现动画效果

6
例如,xml 动画:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:fillAfter="true">

<!-- Rotate -->
<rotate
    android:duration="500"
    android:fromDegrees="30"
    android:interpolator="@android:anim/linear_interpolator"
    android:pivotX="50%"
    android:pivotY="50%"
    android:repeatCount="4"
    android:repeatMode="reverse"
    android:toDegrees="0"/>

<!--Move-->
<translate
    android:duration="1000"
    android:fromXDelta="0%"
    android:fromYDelta="150%"
    android:interpolator="@android:anim/linear_interpolator"
    android:toXDelta="0%"
    android:toYDelta="0%"/>

<!--Fade In-->
<alpha
    android:duration="2000"
    android:fromAlpha="0.0"
    android:interpolator="@android:anim/decelerate_interpolator"
    android:toAlpha="1.0"/>

</set>

通过Java代码创建这个是否可能?
1个回答

14

你试过这样吗:

// when getting anims 
Animation animRotate = AnimationUtils.loadAnimation(context, R.anim.rotate);
Animation animMove = AnimationUtils.loadAnimation(context, R.anim.move);
Animation animFadeIn = AnimationUtils.loadAnimation(context, R.anim.fade_in);

如果你想以编程的方式实现:
我在我的项目中使用了这种方法:
view.animate()
            .scaleY(1)
             //just wanted to show you possible methods you can add more
            .rotationY()
            .alpha()
            .setStartDelay(100)
            .rotationX()
            .setDuration(200)
            .setInterpolator(new DecelerateInterpolator())
            .setListener(new Animator.AnimatorListener() {
                @Override
                public void onAnimationStart(Animator animation) {
                }

                @Override
                public void onAnimationEnd(Animator animation) {

                }

                @Override
                public void onAnimationCancel(Animator animation) {

                }

                @Override
                public void onAnimationRepeat(Animator animation) {

                }
            }).start();

还有一些其他的方法,根据您的xml文件而定:

// scale animation
ScaleAnimation scaleanim = new ScaleAnimation(float fromX, float toX, float fromY, float toY);
scaleanim.setDuration(500);

// create translation animation
TranslateAnimation translateanim = new TranslateAnimation(0, 0,
        TranslateAnimation.ABSOLUTE, xTo - getLeft(), 0, 0,
        TranslateAnimation.ABSOLUTE, yTo - getTop());
translateanim.setDuration(700);

您可以使用 RotateAnimationAlphaAnimation 等动画类型。尝试使用它们,如果无法完成或需要更具体的帮助,请告诉我,我会提供我的现有项目代码。

@编辑: 示例 TranslateAnimation 构造函数:

Animation animation = new TranslateAnimation(
float fromXDelta, float toXDelta, float fromYDelta, float toYDelta);
animation.setDuration(1500);
animation.setFillAfter(true);
view.startAnimation(animation);

@Andreyua 我已经编辑了我的答案。如果你有更多的问题,请告诉我,我会帮助你。 - Yasin Kaçmaz
@Andreyua,您想设置哪种动画?此外,请查看属性动画,我将编辑我的答案。 - Yasin Kaçmaz

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