首先在res/anim下建立一个frame.xml来存放帧动画
布局文件中
类代码中
AnimationDrawable animationDrawable=(AnimationDrawable) imageView1.getBackground();
if(!animationDrawable.isRunning()){
animationDrawable.start();
}
不会改变控件真实的坐标
补间动画与逐帧动画在本质上是不同的,逐帧动画通过连续播放图片来模拟动画的效果,而补间动画则是通过在两个关键帧之间补充渐变的动画效果来实现的。补间动画的优点是可以节省空间。目前 Android应用框架支持的补间动画效果有以下5种。具体实现在android.view.animation类库中。
AlphaAnimation:透明度(alpha)渐变效果,对应 标签。
TranslateAnimation:位移渐变,需要指定移动点的开始和结束坐标,对应 标签。
ScaleAnimation:缩放渐变,可以指定缩放的参考点,对应 标签。
RotateAnimation:旋转渐变,可以指定旋转的参考点,对应 标签。
AnimationSet:组合渐变,支持组合多种渐变效果,对应 标签。
// 透明动画
public void alphaImpl(View v) {
Animation animation = AnimationUtils.loadAnimation(this,
R.anim.alpha_demo);
imageView.startAnimation(animation);
}
// 旋转动画
public void rotateImpl(View v) {
Animation animation = AnimationUtils.loadAnimation(this,
R.anim.rotate_demo);
imageView.startAnimation(animation);
}
// 缩放动画
public void scaleImpl(View v) {
Animation animation = AnimationUtils.loadAnimation(this,
R.anim.scale_demo);
imageView.startAnimation(animation);
}
// 移动效果
public void translateImpl(View v) {
// XML文件
Animation animation = AnimationUtils.loadAnimation(this,
R.anim.translate_demo);
animation.setRepeatCount(Animation.INFINITE);//循环显示
imageView.startAnimation(animation);
/*
* 第一种 imageView.setAnimation(animation); animation.start();
*/
// 第二种
// Java代码
/*
* TranslateAnimation translateAnimation = new TranslateAnimation(0,
* 200, 0, 0); translateAnimation.setDuration(2000);
* imageView.startAnimation(translateAnimation);
*/
}
// 综合实现set_demo.xml中的动画
public void setAll(View v) {
Animation animation = AnimationUtils.loadAnimation(this,
R.anim.set_demo);
imageView.startAnimation(animation);
}
alpha_demo.xml
rotate_demo.xml
scale_demo.xml
translate_demo.xml
set_demo.xml
AlphaAnimation
public void click2(View v) {
//fromDegrees开始旋转的角度
// RotateAnimation ra = new RotateAnimation(0, 360);
//0.5的意思是 控件的宽*0.5
RotateAnimation ra = new RotateAnimation(0, 360, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
ra.setDuration(2000);
ra.setRepeatCount(1);//设置动画执行重复的次数
ra.setRepeatMode(Animation.REVERSE);
//iv开始执行动画
iv.startAnimation(ra);
}
RotateAnimation
public void click2(View view) {
RotateAnimation animation = new RotateAnimation(0, 360, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
animation.setRepeatCount(5);
animation.setRepeatMode(RotateAnimation.RESTART);
animation.setDuration(2000);
lv.startAnimation(animation);
}
ScaleAnimation
public void click3(View view) {
ScaleAnimation scaleAnimation = new ScaleAnimation(1.0f, 2.0f, 1.0f, 2.0f);
scaleAnimation.setDuration(2000);
scaleAnimation.setRepeatCount(2);
scaleAnimation.setRepeatMode(Animation.REVERSE);
lv.startAnimation(scaleAnimation);
}
TranslateAnimation
public void click4(View view) {
TranslateAnimation translateAnimation = new TranslateAnimation(Animation.RELATIVE_TO_PARENT, 0.0f, Animation.RELATIVE_TO_PARENT, 0.0f, Animation.RELATIVE_TO_PARENT, 0.0f, Animation.RELATIVE_TO_PARENT, 0.3f);
translateAnimation.setDuration(2000);
translateAnimation.setFillAfter(true);
lv.startAnimation(translateAnimation);
}
会改变控件真实的坐标 api level 11
AlphaAnimation
RotateAnimation
ScaleAnimation
TranslateAnimation
类中使用
ObjectAnimator oa = (ObjectAnimator) AnimatorInflater.loadAnimator(this, R.animator.oanimator);
//设置执行目标
oa.setTarget(iv);
oa.start();
public void click1(View view) {
ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(iv, "alpha", 0, 0.5f, 0, 1,0,1,0,1,0,1,0,1);
objectAnimator.setDuration(2000);
objectAnimator.start();
}