admin管理员组

文章数量:1318786

android 页面反转动画,android

android-反转动画

我有一个ImageView,当它添加到布局中时会动画。删除后,我想反转相同的动画。

有没有一种方法可以在android中反转动画而无需重新编码和反转参数?

pbreault asked 2020-07-08T06:22:20Z

8个解决方案

75 votes

不,可悲的是您不能使用Animation对象来做到这一点。但是,您可以使用将反转动画的插值器对其进行仿真:

package com.example.android;

import android.view.animation.Interpolator;

public class ReverseInterpolator implements Interpolator {

@Override

public float getInterpolation(float paramFloat) {

return Math.abs(paramFloat -1f);

}

}

然后可以在动画上设置新的插值器:

myAnimation.setInterpolator(new ReverseInterpolator());

pcans answered 2020-07-08T06:22:41Z

25 votes

如果您使用Object或ValueAnimator对视图进行动画处理,则只需

ValueAnimator myAnimator = new ValueAnimator();

myAnimator.reverse()

文档可以在这里找到。

thehayro answered 2020-07-08T06:23:06Z

13 votes

基于pcans的想法,您可以反转任何内插器,而不仅仅是线性。

class ReverseInterpolator implements Interpolator{

private final Interpolator delegate;

public ReverseInterpolator(Interpolator delegate){

this.delegate = delegate;

}

public ReverseInterpolator(){

this(new LinearInterpolator());

}

@Override

public float getInterpolation(float input) {

return 1 - delegate.getInterpolation(input);

}

}

用法

ReverseInterpolator reverseInterpolator = new ReverseInterpolator(new AccelerateInterpolator())

myAnimation.setInterpolator(reverseInterpolator);

Ilya Gazman answered 2020-07-08T06:23:31Z

6 votes

对于pcan,我有类似的方法,但略有不同。 它需要Interpolator,并将有效地传出与在Interpolator中正常使用然后在REVERSE模式下使用的值相同的值。 让您不必考虑在Android上Animation.REVERSE的错误实现。 在这里查看代码

public class ReverseInterpolator implements Interpolator {

private final Interpolator mInterpolator;

public ReverseInterpolator(Interpolator interpolator){

mInterpolator = interpolator;

}

@Override

public float getInterpolation(float input) {

return mInterpolator.getInterpolation(reverseInput(input));

}

/**

* Map value so 0-0.5 = 0-1 and 0.5-1 = 1-0

*/

private float reverseInput(float input){

if(input <= 0.5)

return input*2;

else

return Math.abs(input-1)*2;

}

}

Dori answered 2020-07-08T06:23:53Z

1 votes

您可以使代码记住原始位置和结束位置。 并让您的代码在触发动画时动态获取这些值。

draw answered 2020-07-08T06:24:13Z

1 votes

我想到的最简单的解决方案

android:duration="2000"

android:fromAlpha="0.1"

android:repeatCount="infinite"

android:repeatMode="reverse"

android:toAlpha="1.0">

larisoft answered 2020-07-08T06:24:33Z

0 votes

如果您使用的是xml中的动画,那么一种简单的方法是制作与原始动画完全相同的反向动画。 将Animation.AnimationListener添加到原始动画中,并在onAnimationEnd中启动反向动画。

Khurram Shehzad answered 2020-07-08T06:24:53Z

0 votes

这对我有用

ObjectAnimator anim = ObjectAnimator.ofFloat(imageViewUpb, "rotation", rotationAngle, rotationAngle + 180);

if (linearLayoutb.getVisibility()==GONE){

linearLayoutb.setVisibility(VISIBLE);

anim.setDuration(500);

anim.start();

rotationAngle += 180;

rotationAngle = rotationAngle%360;

imageViewUpb.animate().rotation(rotationAngle).setDuration(500).start();

}else{

linearLayoutb.setVisibility(GONE);

anim.setDuration(500);

anim.start();

rotationAngle += 180;

rotationAngle = rotationAngle%180;

imageViewUpDownb.animate().rotation(rotationAngle).setDuration(500).start();

}

linearlayoutb是当imageviewUpb朝上时展开的视图

使int rotationAngle = 0; global parameter

Goodlife answered 2020-07-08T06:25:22Z

本文标签: android 页面反转动画Android