丈夫志四海,万里犹比邻。这篇文章主要讲述android:3D垂直翻转动画-FlipAnimation相关的知识,希望能为你提供帮助。
- 需求
对ImageView进行相似于翻纸牌的动画 - 解决
各种Animator的组合
动画代码文件1,card_flip_left_out.xml
<
?
【android:3D垂直翻转动画-FlipAnimation】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基础新手教程——1.10 反编译APK获代替码&amp;资源
- android studio+grade配置构建
- Android中怎样做到自己定义的广播仅仅能有指定的app接收
- Android应用坐标系统全面具体解释
- 工作知识点,mybaties逆向生成pojo和mapper
- C#读写操作app.config中的数据
- 初入android驱动开发之字符设备(四-中断)
- mybatis 整合spring之mapperLocations配置的问题
- Android 数据库升级