相关文章推荐
要出家的煎饼果子  ·  exception - ...·  1 年前    · 
失恋的橡皮擦  ·  JavaScript variable ...·  2 年前    · 
慈祥的针织衫  ·  Sass loader is ...·  2 年前    · 
温文尔雅的番茄  ·  排序规则 - ...·  2 年前    · 

位移后 恢复状态:mMiddleAvatar.setTranslationX(0);

改变透明度之后恢复:mMiddleAvatar.setAlpha(1.0f);

旋转后恢复:mMiddleAvatar.setRotation(0);

缩放后恢复:

mMiddleAvatar.setScaleX(1.0f);
mMiddleAvatar.setScaleY(1.0f);

取消 AnimatorSet 动画:

if (mLastAnimatorSet != null) {
    mLastAnimatorSet.cancel();
这种取消会走 onAnimationEnd 回调

所以自定义一个  AnimatorListenerAdapter

public abstract class CancelAnimatorListenerAdapter extends AnimatorListenerAdapter {
    private boolean mCanceled = false;
    @Override
    public void onAnimationCancel(Animator animation) {
        super.onAnimationCancel(animation);
        mCanceled = true;
    public boolean isCanceled() {
        return mCanceled;
ObjectAnimator rightAvatarScaleXAnimator = ObjectAnimator.ofFloat(mRightAvatar, "scaleX", 1.03f, 1.0f);
ObjectAnimator rightAvatarScaleYAnimator = ObjectAnimator.ofFloat(mRightAvatar, "scaleY", 1.03f, 1.0f);
mLastAnimatorSet = new AnimatorSet();
mLastAnimatorSet.play(rightAvatarScaleXAnimator).with(rightAvatarScaleYAnimator);
mLastAnimatorSet.setDuration(100);
mLastAnimatorSet.start();
mLastAnimatorSet.addListener(new CancelAnimatorListenerAdapter() {
    @Override
    public void onAnimationEnd(Animator animation) {
        super.onAnimationEnd(animation);
        if (isCanceled()) {return;}
        if (mMiddleAvatar == null) { return; }
        mRightAvatar.setTranslationX(0);
        mRightAvatar.setAlpha(0.0f);
        mRightAvatar.setScaleX(1.0f);
        mRightAvatar.setScaleY(1.0f);
        mMiddleAvatar.setAlpha(1.0f);
        startMatchTipsAnimation();
                                    public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);final Button sendButt...
                                    android 组件动画移动后原位置不变的解决办法在做项目的时候发现给一些组件添加了移动动画,并且动画完之后停止在动画之后的位置之后再去点击组件的时候就点不到了,但是点移动之前原来的位置是可以,从网上查了一下,解决办法都是在动画完之后把LayoutParams重新设置一下,这里一定要注意,设置完之后一定要把动画再清除一下clearAnimation(),否则两个设置会叠加在一起:AnimatorS...
ObjectAnimator firstAllViewAnimation = ObjectAnimator.ofFloat(mMatchRatingFirstAllView, "alpha", 1.0f, 0.0f);
ObjectAnimator matchRatingAvatarA...
完整动画函数代码: 
public void slideview(final float p1, final float p2) {
    TranslateAnimation animation = new TranslateAnimati
                                    ObjectAnimator是ValueAnimator的子类,他本身就已经包含了时间引擎和值计算,所以它拥有为对象的某个属性设置动画的功能。这使得为任何对象设置动画更加的容易。你不再需要实现 ValueAnimator.AnimatorUpdateListener接口,因为ObjectAnimator动画自己会自动更新相应的属性值。
ObjectAnimator的实例和ValueAnimato
                                    1.勾上“应用根运动”,把更新模式改成“Animate Physics”,把剔除模式改成“剔除更新变换”
2.设置原本动画文件的烘焙动作选项
3.重点:将动画器内的动画,“Write Default”这一项的勾去掉
                                    导入模型动画的时候,选择Legacy,Store in Nodes,并且将模型作为一个GameObject的child。这样,模型动画播放的时候,只是以GameObject的位置作为参考,GameObject的位置移动不会使得模型动画回原来的位置。