先确定初始和终止位置,然后中间的过程为补间动画的动画效果
补间动画分为四种:
1、AlphaAnimation 透明度动画
2、ScaleAnimation 缩放动画
3、TranslateAnimation 平移动画
4、RotateAnimation 旋转动画
①静态实现:
1.res/anim在此文件夹中创建xml资源文件
2.创建对应动画效果的节点,例如旋转动画节点,同时设置该动画的属性(开始位置、结束位置、一次播放的时间、播放次数、播放模式等)
3.使用对应的动画类,通过AnimationUtils.loadAnimation(context,动画的资源文件)
4.通过动画类对象调用start()方法
5.把该动画类的对象绑定在控件(不仅限于ImageView也可以是Button等)上
②动态实现:
1.创建对应的动画类,使用new的方式。通过构造方法,把该动画的初始位置和终止位置确定出来
2.通过动画类的对象设置属性(一次播放的时间、播放次数、播放模式等)
3.调用start();启动动画
4.把该动画绑定在控件上
注意:补间动画要先启动动画,再进行绑定
③组合补间动画
1.通过xml资源文件把多个动画节点放在节点中
2.在动画的节点里,只设置动画的开始和终止位置;重复次数,重复模式和播放时间等属性在set节点中设置
3.使用Animation类的对象来加载组合补间动画
4.之后操作同静态补间动画使用
④补间动画应用
activity跳转添加动画效果
1.overridePendingTransition(“进入动画”,“退出动画”);
2.写在startActivity和finish这两个方法的下面
3.onKeyDown()监听手机按键方法
4.keycode参数可以判断当前按下的是什么按键
一、AlphaAnimation
常用属性:
duration动画的时间,以毫秒为单位
fillAfter动画完成之后的状态,true为保持结束的状态,false为回到初始状态
repeatCount重复次数,可以填数字,也可以填infinite表示无限
repeatMode重复的模式,restart表示重新开始,reverse表示往复循环
interpolator播放方式,匀速,变速
实现方式:
代码实现
/**
* 代码实现透明动画
*/
private void startAlpha2(){
AlphaAnimation animation = new AlphaAnimation(1,0);
animation.setDuration(2000);
animation.setRepeatCount(1000000);
animation.start();
iv6.setAnimation(animation);
}
然后调用startAlpha2()即可
XML实现:
1.首先在res下建一个文件夹,这里我们命名为anim
2.在anim文件夹下新建一个alpha.xml文件
<alpha
xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="3000"
android:fromAlpha="1"
android:toAlpha="0" //透明度由1-->0
android:repeatCount="10000"
>
</alpha>
3.然后在Activity里写一个方法找到xml文件
/**
* XML实现透明度动画
* @param iv
*/
private void startAlpha(ImageView iv) {
AlphaAnimation animation = (AlphaAnimation) AnimationUtils.loadAnimation(this,R.anim.alpha);
//这里注意start要在设置属性的前面
animation.start();
iv.setAnimation(animation);
}
4.调用时可以用startAlpha(imageview);
二、ScaleAnimation
代码实现
/**
* 代码实现缩放
*/
private void startScale1(ImageView iv){
ScaleAnimation animation = new ScaleAnimation(1f, 0.2f,1f,0.2f,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);
//设置动画执行的次数
animation.setRepeatCount(1000000);
// 设置动画执行的时间
animation.setDuration(1000);
// 设置动画执行的模式:Animation.REVERSE往返,Animation.RESTART重复
animation.setRepeatMode(Animation.REVERSE);
animation.start();
//让iv控件实现动画效果
iv.setAnimation(animation);
}
调用的时候使用startScale1(imageview)调用即可
XML实现:
1.在anim文件夹下建一个scale.xml文件
<scale
xmlns:android="http://schemas.android.com/apk/res/android"
android:duration = "2000"
//开始缩放的坐标
android:fromXScale="0"
android:fromYScale="0"
//缩放的中心坐标
android:pivotX="50%"
android:pivotY="50%"
//结束的坐标
android:toXScale="100%"
android:toYScale="100%"
//次数
android:repeatCount="1000"
></scale>
2.Activity里调用
/**
* XML实现缩放
*/
private void startScale2(){
ScaleAnimation animation = (ScaleAnimation) AnimationUtils.loadAnimation(this,R.anim.scale);
animation.start();
iv8.setAnimation(animation);
}
三、TranslateAnimation
代码实现
/**
* 动态实现平移动画
*/
private void statTweenTran1(ImageView iv) {
/*
通过查看TranslateAnimation构造方法填写参数
其中fromXType:X坐标起始位置的类型(1.相对自己 2.相对父布局 3.绝对位置)
fromXValue:X坐标起始位置的值
以下同理。
*/
TranslateAnimation animation = new TranslateAnimation(
Animation.RELATIVE_TO_SELF,
0f,
Animation.RELATIVE_TO_SELF,
2f,
Animation.RELATIVE_TO_SELF,
0f,
Animation.RELATIVE_TO_SELF,
4f);
//设置动画执行的次数
animation.setRepeatCount(1000000);
// 设置动画执行的时间
animation.setDuration(1000);
// 设置动画执行的模式:Animation.REVERSE往返,Animation.RESTART重复
animation.setRepeatMode(Animation.REVERSE);
animation.start();
//让iv控件实现动画效果
iv.setAnimation(animation);
}
XML实现
1.在anim下新建xml文件translate.xml
<translate
xmlns:android="http://schemas.android.com/apk/res/android"
android:fromXDelta="0"
android:toXDelta="200%"
android:fromYDelta="0"
android:toYDelta="0"
android:duration="2000"
android:repeatCount="infinite"
android:repeatMode="reverse"
/>
2.Activity建方法调用
/**
* 使用xml
* 开始一个平移动画
* 和帧动画的区别:帧动画要先绑定控件,再start;补间动画要先启动,再绑定
*/
private void startTweenTran(ImageView iv) {
// 1.通过引入xml文件的方式加载一个动画
TranslateAnimation animation = (TranslateAnimation) AnimationUtils.loadAnimation(this, R.anim.translate);
// 让动画动起来(帧动画是在最后一行start,补间动画写在设置之前)
animation.start();
// 把平移动画和iv动画进行绑定
iv.setAnimation(animation);
}
四、RotateAnimation
XML实现
1.在anim下新建rotate.xml文件
2.在Activity里调用
/**
* 使用资源文件的方式,实现旋转动画 并启动
* @param iv
*/
private void startRotateAnim(ImageView iv) {
// 把旋转动画的资源文件,转换成旋转动画对象
RotateAnimation animation = (RotateAnimation) AnimationUtils.loadAnimation(this, R.anim.rotate);
animation.start();
iv.setAnimation(animation);
}
五、多种动画组合
1.需要在新建的xml文件里选择set节点,如下四种动画的组合
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="1000"
android:fillAfter="true"
android:repeatMode="restart">
<scale
android:duration="2000"
android:fromXScale="0"
android:fromYScale="0"
android:pivotX="50%"
android:pivotY="50%"
android:repeatCount="1200"
android:toXScale="100%"
android:toYScale="100%" />
<alpha
android:duration="3000"
android:fromAlpha="1"
android:repeatCount="10000"
android:toAlpha="0" />
<rotate
android:fromDegrees="0"
android:pivotX="50%"
android:pivotY="50%"
android:repeatCount="1000"
android:toDegrees="360" />
<translate
android:fromXDelta="0"
android:repeatCount="1000"
android:toXDelta="200%" />
set>
2.Activity里的调用实现
/**
* 使用xml资源文件实现
* 旋转+平移组合动画,并启动
*/
private void startAnim(ImageView iv) {
Animation animation = AnimationUtils.loadAnimation(this, R.anim.rotate_translate);
animation.start();
iv.setAnimation(animation);
}
六、Activity跳转动画实现
1.在anim下新建两个xml文件,一个是in的一个是out的。这里以scale为例
in
<scale
xmlns:android="http://schemas.android.com/apk/res/android"
android:duration = "2000"
android:fromXScale="0"
android:fromYScale="0"
android:pivotX="50%"
android:pivotY="50%"
android:toXScale="100%"
android:toYScale="100%"/>
out
<scale
xmlns:android="http://schemas.android.com/apk/res/android"
android:duration = "2000"
android:fromXScale="100%"
android:fromYScale="100%"
android:pivotX="50%"
android:pivotY="50%"
android:toXScale="0"
android:toYScale="0"
/>
2.这里我们使用系统的返回按键的监听
/**
* 这个是响应手机按键按下时的方法
*
* @param keyCode
* @param event
* @return
*/
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// 判断到当前点击的按键为返回键
// 既然自己判断了返回键的监听事件,就要自己来实现返回的功能
if (keyCode == KeyEvent.KEYCODE_BACK) {
finish();
overridePendingTransition(R.anim.trans_back_in, R.anim.tran_back_out);
}
return super.onKeyDown(keyCode, event);
}
3.在另一处跳转也需要添加
// 添加Activity跳转时的动画效果
overridePendingTransition(R.anim.trans_back_in,R.anim.tran_back_out);