【问题标题】:How can i create left to right and then inverse animation in android?如何在android中创建从左到右然后反转的动画?
【发布时间】:2017-06-29 12:37:46
【问题描述】:

如何创建一个始终从左向右平移的动画,然后如果动画停止,它会转向另一种方向并从右向左平移。我也可以用 xml 和编程方式创建翻译动画。

【问题讨论】:

    标签: android translate-animation


    【解决方案1】:

    实际上取决于您的最低 API 级别。基本上你应该看看ViewPropertyAnimator 类。

    假设您有 view 动画,parent - 此视图的父级。您的代码如下所示:

    final float startX = 0; //start position
    final float endX = parent.getWidth() - view.getWidth(); //end position - right edge of the parent
    

    API 12+

    view.animate().translationX(endX).setListener(new AnimatorListenerAdapter() {
            @Override
            public void onAnimationEnd(Animator animation) {
                view.animate().translationX(startX).start();
            }
        }).start();
    

    API 16+

    view.animate().translationX(endX).withEndAction(new Runnable() {
            @Override
            public void run() {
                view.animate().translationX(startX).start();
            }
        }).start();
    

    您的 startXendX 可能不同 - 取决于您的需要。

    请注意,start() 方法调用是可选的。

    我也没有提到 API

    【讨论】:

    • 达库杰姆帕维尔。你的答案是正确的,hellpfull
    【解决方案2】:

    创建这个xml,它将从左到右,从右到左翻译。

    /res/anim/translate.xml

    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android"
        android:fillEnabled="true"
        android:fillAfter="true" >
    
        <translate
            android:interpolator="@android:anim/linear_interpolator"
            android:fromXDelta="0%p"
            android:toXDelta="10%p"
            android:duration="2000"
            android:startOffset="0" />
    
        <translate
            android:interpolator="@android:anim/linear_interpolator"
            android:fromXDelta="10%p"
            android:toXDelta="-10%p"
            android:duration="2000"
            android:startOffset="2000" />
    
    </set>
    

    假设您想将此动画应用于图像,然后在您的类文件中编写以下代码。

    ImageView image = (ImageView)findViewById(R.id.imageView1);
    Animation animation = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.translate);
    image.startAnimation(animation);
    

    编辑:

    如果您希望动画无限重复,请将以下属性添加到 translate 标记。

    android:repeatCount="infinite"
    android:repeatMode="restart"
    

    【讨论】:

    • 请注意此解决方案使用旧的动画框架
    • 我怎样才能让它无限动画?我读过动画列表中的重复计数属性效果不佳。
    • @Csabi 你可以通过使用 repeatCount 和 repeatCode 属性来做到这一点,检查我编辑的答案。
    猜你喜欢
    • 2016-03-01
    • 2018-09-06
    • 2021-06-05
    • 1970-01-01
    • 1970-01-01
    • 2011-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多