补间动画的实现

补间动画(Tween Animation)
补间动画与逐帧动画在本质上是不同的,逐帧动画通过连续播放图片来模拟动画的效果,而补间动画则是通过在两个关键帧之间补充渐变的动画效果来实现的。补间动画的优点是可以节省空间。目前Android应用框架支持的补间动画效果有以下5种。具体实现在android.view.animation类库中。


AlphaAnimation:透明度(alpha)渐变效果,对应<alpha/>标签。

TranslateAnimation:位移渐变,需要指定移动点的开始和结束坐标,对应<translate/>标签。
ScaleAnimation:缩放渐变,可以指定缩放的参考点,对应<scale/>标签。
RotateAnimation:旋转渐变,可以指定旋转的参考点,对应<rotate/>标签。

AnimationSet:组合渐变,支持组合多种渐变效果,对应<set/>标签。


补间动画的效果同样可以使用XML语言来定义,这些动画模板文件通常会被放在Android项目的res/anim/目录下。

1.MainActivity.java具体实现代码:

package com.example.lesson19_tween;  
  
import com.example.lesson19_tween.R;  
  
import android.app.Activity;  
import android.os.Bundle;  
import android.view.Menu;  
import android.view.View;  
import android.view.animation.Animation;  
import android.view.animation.AnimationUtils;  
import android.view.animation.ScaleAnimation;  
import android.view.animation.TranslateAnimation;  
import android.widget.ImageView;  
  
public class MainActivity extends Activity {  
  
    private ImageView imageView;  
  
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.activity_main);  
  
        imageView = (ImageView) findViewById(R.id.imageView1);  
    }  
  
    @Override  
    public boolean onCreateOptionsMenu(Menu menu) {  
        // Inflate the menu; this adds items to the action bar if it is present.  
        getMenuInflater().inflate(R.menu.main, menu);  
        return true;  
    }  
  
    // 透明动画  
    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);  
    }  
      
}  
1>透明度alpha

<!--   
 fromAlpha :起始透明度  
 toAlpha:结束透明度  
 1.0表示完全不透明  
 0.0表示完全透明 
duration表示时长 
  -->  
<alpha xmlns:android="http://schemas.android.com/apk/res/android"  
    android:interpolator="@android:anim/accelerate_decelerate_interpolator"  
    android:fromAlpha="1.0"  
    android:toAlpha="0.1"  
    android:duration="2000"/>  
2>旋转动画rotate

<!--   
fromDegrees:表示旋转的起始角度  
toDegrees:表示旋转的结束角度  
repeatCount:旋转的次数  默认值是0 代表旋转1次  如果值是repeatCount=4 旋转5次,值为-1或者infinite时,表示补间动画永不停止  
repeatMode 设置重复的模式。默认是restart。当repeatCount的值大于0或者为infinite时才有效。  
repeatCount=-1 或者infinite 循环了  
还可以设成reverse,表示偶数次显示动画时会做与动画文件定义的方向相反的方向动行。  
 -->  
<rotate xmlns:android="http://schemas.android.com/apk/res/android"  
    android:interpolator="@android:anim/accelerate_decelerate_interpolator"  
    android:fromDegrees="0"  
    android:toDegrees="360"  
    android:duration="1000"  
    android:repeatCount="1"  
    android:repeatMode="reverse"/>  
3>缩放动画scale

<!--   
fromXScale:表示沿着x轴缩放的起始比例  
toXScale:表示沿着x轴缩放的结束比例  
  
fromYScale:表示沿着y轴缩放的起始比例  
toYScale:表示沿着y轴缩放的结束比例   
图片中心点:  
  android:pivotX="50%"   
  android:pivotY="50%"   
 -->
 <scale xmlns:android="http://schemas.android.com/apk/res/android"  
    android:interpolator="@android:anim/accelerate_interpolator"  
    android:fromXScale="0.2"  
    android:toXScale="1.5"  
    android:fromYScale="0.2"  
    android:toYScale="1.5"  
    android:pivotX="50%"  
    android:pivotY="50%"  
    android:duration="2000"/>  
4>平移translate

<!--   
  android:interpolator 动画的渲染器  
  1、accelerate_interpolator(动画加速器) 使动画在开始的时候 最慢,然后逐渐加速  
  2、decelerate_interpolator(动画减速器)使动画在开始的时候 最快,然后逐渐减速  
  3、accelerate_decelerate_interpolator(动画加速减速器)  
           中间位置分层:  使动画在开始的时候 最慢,然后逐渐加速           
          使动画在开始的时候 最快,然后逐渐减速  结束的位置最慢  
 fromXDelta  动画起始位置的横坐标  
 toXDelta    动画起结束位置的横坐标  
 fromYDelta  动画起始位置的纵坐标  
 toYDelta   动画结束位置的纵坐标  
 duration 动画的持续时间  
 -->   
<translate xmlns:android="http://schemas.android.com/apk/res/android"  
    android:interpolator="@android:anim/accelerate_decelerate_interpolator"  
    android:fromXDelta="0"  
    android:toXDelta="320"  
    android:fromYDelta="0"  
    android:toYDelta="0"  
    android:duration="2000"/> 

5>组合动画set

<set xmlns:android="http://schemas.android.com/apk/res/android"  
    android:interpolator="@android:anim/decelerate_interpolator"  
    android:shareInterpolator="true" >  
  
    <scale  
        android:duration="2000"  
        android:fromXScale="0.2"  
        android:fromYScale="0.2"  
        android:pivotX="50%"  
        android:pivotY="50%"  
        android:toXScale="1.5"  
        android:toYScale="1.5" />  
  
    <rotate  
        android:duration="1000"  
        android:fromDegrees="0"  
        android:repeatCount="1"  
        android:repeatMode="reverse"  
        android:toDegrees="360" />  
  
    <translate  
        android:duration="2000"  
        android:fromXDelta="0"  
        android:fromYDelta="0"  
        android:toXDelta="320"  
        android:toYDelta="0" />  
  
    <alpha  
        android:duration="2000"  
        android:fromAlpha="1.0"  
        android:toAlpha="0.1" />    
</set>   
<set/>标签对应的就是AnimationSet类,即“动画集合”的概念,支持加入多种动画效果,
如渐变动画(alpha)、大小动画(scale),线性动画(translate)等。另外,在Android系统中,
所有与动画相关的类都归类在android.view.animation包之下,大家可以参考SDK文档进行进一步学习。






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值