今天我使用Android Studio制作了一个简单的倒计时动画,算是练习一下属性动画的使用吧,先看一个效果吧,点击播放倒计时动画按钮后可以播放倒计时动画
实现方式:
第一步:使用Android Studio创建一个Android工程,并且在drawable文件夹下放入四张用于设置倒计时动画的图片
第二步:修改activity_main.xml中的代码
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.fyt.animationdemo.MainActivity"
android:orientation="vertical">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="播放倒计时动画"
android:onClick="click"/>
<ImageView
android:id="@+id/iv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"/>
</LinearLayout>
package com.fyt.animationdemo;
import android.animation.AnimatorSet;
import android.animation.ObjectAnimator;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.ImageView;
public class MainActivity extends Activity {
private ImageView iv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//获得布局文件上的ImageView控件
iv = (ImageView) findViewById(R.id.iv);
}
//实现倒计时效果的按钮响应函数
public void click(View view) {
//创建播放倒计时动画的线程
createAnimationThread();
}
//创建消息处理器
Handler handler = new Handler(){
//创建数组,保存图片资源的id
final int[] arrayId = {0, R.drawable.three, R.drawable.two, R.drawable.one, R.drawable.start};
//处理从主线程中发过来的消息
@Override
public void handleMessage(Message msg) {
//获得从子线程中发过来的数据
int index = (int) msg.obj;
//设置ImageView控件中显示的图片
iv.setImageResource(arrayId[index]);
//设置图片的缩放比例
iv.setScaleX(0);
iv.setScaleY(0);
//设置x方向上的缩放动画
ObjectAnimator oa1 = ObjectAnimator.ofFloat(iv, "scaleX", 0, 1);
oa1.setDuration(500);
//设置y方向上的缩放动画
ObjectAnimator oa2 = ObjectAnimator.ofFloat(iv, "scaleY", 0, 1);
oa2.setDuration(500);
//创建动画师集合
AnimatorSet set = new AnimatorSet();
//设置所有的动画一起播放
set.playTogether(oa1, oa2);
//播放动画
set.start();
}
};
//创建播放倒计时动画的线程
public void createAnimationThread() {
//创建一个子线程
Thread thread = new Thread(){
//执行子线程
@Override
public void run() {
for (int i = 1; i <= 4; i++) {
//创建消息对象
Message message = handler.obtainMessage();
//设置消息对象携带的数据
message.obj = i;
//将消息发送到主线程的消息处理器
handler.sendMessage(message);
try {
//暂停500毫秒
sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
//启动子线程
thread.start();
}
}
最后一步:编译运行