【问题标题】:How to make Animation programmatically如何以编程方式制作动画
【发布时间】:2016-07-26 15:56:52
【问题描述】:

例如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 代码创建?

【问题讨论】:

    标签: android animation


    【解决方案1】:

    你试过这样吗:

    // 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 等。尝试使用它们,如果您失败或更具体的帮助,我会给您我现有项目的代码。

    @Edit:示例TranslateAnimation构造函数:

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

    【讨论】:

    • @Andreyua 我已经编辑了我的答案。如果您有更多问题,请告诉我,我会提供帮助。
    • @Andreyua 你想设置哪个动画,另外看看Property Animation 我会编辑我的答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-12
    • 2021-11-02
    • 1970-01-01
    相关资源
    最近更新 更多