• android:3D垂直翻转动画-FlipAnimation


    • 需求
      对ImageView进行相似于翻纸牌的动画
    • 解决
      各种Animator的组合

    第一步动画:
    动画代码文件1,card_flip_left_out.xml

      <?

    xml version="1.0" encoding="utf-8"?

    > <set xmlns:android="http://schemas.android.com/apk/res/android" > <!-- 先缩小 --> <objectAnimator android:duration="200" android:propertyName="scaleX" android:valueFrom="1.0" android:valueTo="0.8" /> <objectAnimator android:duration="200" android:propertyName="scaleY" android:valueFrom="1.0" android:valueTo="0.8" /> <!-- 再旋转 --> <objectAnimator android:duration="@integer/card_flip_time_full" android:interpolator="@android:interpolator/accelerate_decelerate" android:propertyName="rotationY" android:startOffset="200" android:valueFrom="0" android:valueTo="90" /> <!-- 同一时候透明度变化 --> <objectAnimator android:duration="@integer/card_flip_time_full" android:propertyName="alpha" android:startOffset="200" android:valueFrom="1.0" android:valueTo="0.0" /> </set>

    第二步动画
    动画文件2:card_flip_left_out

    <?

    xml version="1.0" encoding="utf-8"?

    > <set xmlns:android="http://schemas.android.com/apk/res/android" > <!-- 马上设置为透明 --> <objectAnimator android:duration="0" android:propertyName="alpha" android:valueFrom="1.0" android:valueTo="0.0" /> <!-- 旋转 --> <objectAnimator android:duration="@integer/card_flip_time_full" android:interpolator="@android:interpolator/accelerate_decelerate" android:propertyName="rotationY" android:valueFrom="-90" android:valueTo="0" /> <!-- 旋转一半的时间。逐渐显示 --> <objectAnimator android:duration="1" android:propertyName="alpha" android:startOffset="@integer/card_flip_time_half" android:valueFrom="0.0" android:valueTo="1.0" /> <!-- 最后放大 --> <objectAnimator android:duration="200" android:propertyName="scaleX" android:startOffset="@integer/card_flip_time_full" android:valueFrom="0.8" android:valueTo="1.0" /> <objectAnimator android:duration="200" android:propertyName="scaleY" android:startOffset="@integer/card_flip_time_full" android:valueFrom="0.8" android:valueTo="1.0" /> </set>

    以下就是写java代码啦,在第一个动画结束的时候,换图。

    package com.example.android.animationsdemo;
    import android.animation.Animator;
    import android.animation.AnimatorInflater;
    import android.animation.AnimatorListenerAdapter;
    import android.animation.AnimatorSet;
    import android.app.Activity;
    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.ImageView;
    
    /**
     * @date 2015年3月18日 下午2:28:33
     * @author Zheng Haibo
     * @Description: 图片的翻转动画
     */
    public class ImageFlipActivity extends Activity {
    
        private ImageView imageView;
        private int clickCount = 0;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_image_flip);
            imageView = (ImageView) findViewById(R.id.iv_show);
    
            imageView.setOnClickListener(new OnClickListener() {
    
                @Override
                public void onClick(View v) {
                    playFlipAnimation2();
                }
    
            });
        }
    
        private void playFlipAnimation2() {
            clickCount++;
            AnimatorSet animatorSetOut = (AnimatorSet) AnimatorInflater
                    .loadAnimator(this, R.animator.card_flip_left_out);
    
            final AnimatorSet animatorSetIn = (AnimatorSet) AnimatorInflater
                    .loadAnimator(this, R.animator.card_flip_left_in);
    
            animatorSetOut.setTarget(imageView);
            animatorSetIn.setTarget(imageView);
    
            animatorSetOut.addListener(new AnimatorListenerAdapter() {
    
                @Override
                public void onAnimationEnd(Animator animation) {// 翻转90度之后,换图
                    if (clickCount % 2 == 0) {
                        imageView.setImageResource(R.drawable.image1);
                    } else {
                        imageView.setImageResource(R.drawable.image2);
                    }
                    animatorSetIn.start();
                }
            });
    
            animatorSetIn.addListener(new AnimatorListenerAdapter() {
    
                @Override
                public void onAnimationEnd(Animator animation) {
                    // TODO
                }
            });
            animatorSetOut.start();
        }
    
    }
    
    • 很多其它交流

    Android开发联盟QQ群:272209595

  • 相关阅读:
    iOS NSData简单解析
    CocoaPods安装和使用教程
    iOS_ruby环境的配置
    ios进行打包
    Missing iOS Distribution signing identity问题解决
    iOS 打包
    效果类似于label从下往上滑(采用uiTableView实现)
    IOS开发效率之为Xcode添加常用的代码片段
    JS中!!的用法
    java 短路与(||)时报错The operator || is undefined for the argument type(s) int, boolean
  • 原文地址:https://www.cnblogs.com/slgkaifa/p/7374983.html
Copyright © 2020-2023  润新知