// 按钮模拟心脏跳动
private
void
playHeartbeatAnimation() {
AnimationSet animationSet =
new
AnimationSet(
true
);
animationSet.addAnimation(
new
ScaleAnimation(
1
.0f,
1
.8f,
1
.0f,
1
.8f,
Animation.RELATIVE_TO_SELF,
0
.5f, Animation.RELATIVE_TO_SELF,
0
.5f));
animationSet.addAnimation(
new
AlphaAnimation(
1
.0f,
0
.4f));
animationSet.setDuration(
200
);
animationSet.setInterpolator(
new
AccelerateInterpolator());
animationSet.setFillAfter(
true
);
animationSet.setAnimationListener(
new
AnimationListener() {
@Override
public
void
onAnimationStart(Animation animation) {
}
@Override
public
void
onAnimationRepeat(Animation animation) {
}
@Override
public
void
onAnimationEnd(Animation animation) {
AnimationSet animationSet =
new
AnimationSet(
true
);
animationSet.addAnimation(
new
ScaleAnimation(
1
.8f,
1
.0f,
1
.8f,
1
.0f, Animation.RELATIVE_TO_SELF,
0
.5f,
Animation.RELATIVE_TO_SELF,
0
.5f));
animationSet.addAnimation(
new
AlphaAnimation(
0
.4f,
1
.0f));
animationSet.setDuration(
600
);
animationSet.setInterpolator(
new
DecelerateInterpolator());
animationSet.setFillAfter(
false
);
// 实现心跳的View
imageView.startAnimation(animationSet);
}
});
// 实现心跳的View
imageView.startAnimation(animationSet);
}
|
由于这是一个循环的动画,所以需要开一个线程来进行动画的实现,当然还有另外一个方法,就是在一个动画结束开始另一个动画,在另一个动画结束开始这个动画也可以,这边示例用的是线程。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
new
Thread(){
public
void
run() {
while
(
true
){
try
{
Thread.sleep(
1000
);
}
catch
(InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
runOnUiThread(
new
Runnable() {
public
void
run() {
playHeartbeatAnimation();
}
});
}
};
}.start();
|