首页 > 系统 > Android > 正文

android使用FlipAnimation实现3D垂直翻转动画

2019-10-22 18:18:09
字体:
来源:转载
供稿:网友

本文实例为大家分享了android实现3D垂直翻转动画的具体代码,供大家参考,具体内容如下

需求

对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(); }}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持VEVB武林网。


注:相关教程知识阅读请移步到Android开发频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表