动画:
一、帧动画
res\drawable
Drawable动画
使用的类:AnimationDrawable
常用方法:
start:启动
stop:停止
isRunning:是否正在运行
将指定的一系列图片,按照顺序进行切换,类似Gif
使用步骤:
1、准备资源图片
2、在res\drawable\下创建<animation-list>
3、使用<item>进行图片显示顺序的设置和停留时间的设置
4、在对应的ImageView中使用background引用刚刚的<animation-list>
5、在对应的Activity中使用AnimationDrawable的start启动动画
二、补间动画
View动画
res\anim
使用的类:Animation和AnimationUtils
通过设置图片的透明度、平移、缩放、旋转等实现动画的效果
使用方式:
1、XML方式
使用步骤:
1、在res文件夹下创建anim文件夹,用于存储动画效果
2、在anim下创建对应的动画效果
1、alpha:透明度
常用属性:
fromAlpha:起始的透明度
toAlpha:终止的透明度
duration:动画的持续时间,单位毫秒
注:透明度范围:0.0-1.0,其中0.0完全透明、1.0完全显示
2、rotate旋转
常用属性:
fromDegrees:起始角度
toDegrees:终止角度
pivotX:中心点的x坐标
pivotY:中心点的y坐标
repeatCount:重复的次数
repeatMode:重复的模式
interpolator:加速效果
3、translate:平移
常用属性:
fromXDelta:设置起始的x坐标
toXDelta:终止的x坐标
fromYDelta:起始的y坐标
toYDelta:终止的y坐标
repeatCount:重复的次数
repeatMode:重复的模式
interpolator:加速效果
4、scale:设置缩放效果
常用属性:
fromXScale:起始的x方向的缩放
toXScale:结束的x方向的缩放
fromYScale:起始的y方向的缩放
toYScale:终止的y方向的缩放
repeatCount:重复的次数
repeatMode:重复的模式
interpolator:加速效果
5、set:组合动画
常用属性:
repeatCount:重复的次数
repeatMode:重复的模式
3、在对应的Activity中通过AnimationUtils.loadAnimation获取对应的动画对象
4、找到对应的ImageView设置startAnimation对应的动画效果并启动
注意:interpolator动画的加速效果
常用的值:
@android:anim/accelerate_decelerate_interpolator" 先加速后减速
@android:anim/accelerate_interpolator 开始慢,结束快
@android:anim/decelerate_interpolator 开始快,结束慢
@android:anim/anticipate_interpolator 开始时会超出起始位置,再执行动画
@android:anim/overshoot_interpolator 结束时会超出终止位置,再结束动画
@android:anim/anticipate_overshoot_interpolator 开始和结束时都会超出一定距离
@android:anim/bounce_interpolator 结束时,有反弹效果
@android:anim/cycle_interpolator 动画按特定的次数执行多次,有振动效果
@android:anim/linear_interpolator 均匀的速度执行动画
2、JAVA方式
常用的动画类:
1、AlphaAnimation:透明度动画类
构造方法:
AlphaAnimation(float fromAlpha, float toAlpha)
参数说明:
fromAlpha:起始的透明度
toAlpha:终止的透明度
2、RotateAnimation:旋转动画类
构造方法:
RotateAnimation(float fromDegrees, float toDegrees, float pivotX, float pivotY)
参数说明:
fromDegrees:起始的角度
toDegrees:终止的角度
pivotX:中心点的x坐标
pivotY:中心点的y坐标
3、TranslateAnimation:平移动画类
构造方法:
TranslateAnimation(float fromXDelta, float toXDelta, float fromYDelta, float toYDelta)
参数说明:
fromXDelta:x方向起始位置
toXDelta:x方向终止位置
fromYDelta:y方向起始位置
toYDelta:y方向终止位置
4、ScaleAnimation:缩放动画类
构造方法:
ScaleAnimation(float fromX, float toX, float fromY, float toY)
参数说明:
fromX:x方向的起始缩放
toX:x方向终止缩放
fromY:y方向起始缩放
toY:y方向终止缩放
5、AnimationSet:组合动画类
常用方法:
addAnimation:添加动画效果
三、属性动画
res\animator
2种方式:
1、xml文件
使用步骤:
1、在res\animator文件夹
2、创建对应的<objectAnimator>
使用android:propretyName:用来标记哪种动画
常用的值:
alpha:透明度
backgroundColor:背景色
rotateX/Y:旋转
scaleX/Y:缩放
translationX/Y:移动
注意:组合动画使用的<set>
3、在对应的Activity中获取对应的动画并绑定控件且启动
AnimatorInflater.loadAnimator:将指定的xml文件转换为动画对象
setTarget:为指定的控件设置动画效果
start:启动动画
end:结束动画
cancel:取消动画
2、java方式
1、ObjectAnimator:属性动画
包括常用的:透明度、旋转、移动、缩放
2、AnimatorSet:属性动画的组合动画
playTogether:同时播放
playSequentially:顺序播放
play(动画).with/before/after:自定义播放
addUpdateListener:监听属性动画的变化过程
颜色资源:
路径:res\values\colors
<color >
补间动画
public class MainActivity extends Activity {
private ImageView iv;
//声明对应的补间动画对象
private Animation animation;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
iv=(ImageView)findViewById(R.id.iv);
}
public void click(View view) {
switch (view.getId()) {
case R.id.tv_1://透明度动画
//加载对应的透明度动画效果
animation=AnimationUtils.loadAnimation(this, R.anim.my_alpha);
break;
case R.id.tv_2://旋转
animation=AnimationUtils.loadAnimation(this, R.anim.my_rotate);
break;
case R.id.tv_3://移动
animation=AnimationUtils.loadAnimation(this, R.anim.my_transalte);
break;
case R.id.tv_4://缩放
animation=AnimationUtils.loadAnimation(this, R.anim.my_scale);
break;
case R.id.iv://组合动画
//animation=AnimationUtils.loadAnimation(this, R.anim.my_set);
AnimationSet as=new AnimationSet(true);
as.addAnimation(animation);
as.setDuration(3000);
as.setRepeatCount(10);
as.setRepeatMode(Animation.RESTART);
as.setFillAfter(true);//设置动画结束时,是否
//设置是否有动画效果
as.setInterpolator(this, android.R.anim.fade_in);
break;
}
//为动画设置监听事件
animation.setAnimationListener(new AnimationListener() {
//启动
@Override
public void onAnimationStart(Animation animation) {
// TODO Auto-generated method stub
Log.e("Animation", "onAnimationStart……");
}
//重复
@Override
public void onAnimationRepeat(Animation animation) {
// TODO Auto-generated method stub
Log.e("Animation", "onAnimationRepeat……");
}
//结束
@Override
public void onAnimationEnd(Animation animation) {
// TODO Auto-generated method stub
Log.e("Animation", "onAnimationEnd……");
}
});
//开始执行动画
iv.startAnimation(animation);
}
}
xml
<?xml version="1.0" encoding="UTF-8"?>
<alpha android:duration="4000" android:toAlpha="1.0" android:fromAlpha="0.1" xmlns:android="http://schemas.android.com/apk/res/android"> </alpha>
2
<?xml version="1.0" encoding="UTF-8"?>
<rotate android:repeatMode="reverse" android:repeatCount="10" android:interpolator="@android:anim/accelerate_decelerate_interpolator" android:pivotY="50%" android:pivotX="50%" android:toDegrees="360" android:fromDegrees="0" android:duration="2000" xmlns:android="http://schemas.android.com/apk/res/android"> </rotate>
3
<?xml version="1.0" encoding="UTF-8"?>
<scale android:interpolator="@android:anim/cycle_interpolator" android:repeatMode="restart" android:repeatCount="10" android:pivotY="50%" android:pivotX="50%" android:toYScale="6" android:fromYScale="0.1" android:toXScale="3" android:fromXScale="0.1" android:duration="3000" xmlns:android="http://schemas.android.com/apk/res/android"> </scale>
4
<?xml version="1.0" encoding="UTF-8"?>
-<set android:repeatMode="reverse" android:repeatCount="10" xmlns:android="http://schemas.android.com/apk/res/android"> <alpha xmlns:android="http://schemas.android.com/apk/res/android" android:toAlpha="1.0" android:fromAlpha="0.1" android:duration="2000"> </alpha> <rotate android:repeatMode="reverse" android:repeatCount="10" xmlns:android="http://schemas.android.com/apk/res/android" android:duration="1000" android:toDegrees="360" android:pivotY="50%" android:pivotX="50%" android:interpolator="@android:anim/accelerate_decelerate_interpolator" android:fromDegrees="0"> </rotate> <scale android:repeatMode="restart" android:repeatCount="10" xmlns:android="http://schemas.android.com/apk/res/android" android:duration="2000" android:pivotY="50%" android:pivotX="50%" android:interpolator="@android:anim/cycle_interpolator" android:toYScale="6" android:toXScale="3" android:fromYScale="0.1" android:fromXScale="0.1"> </scale> <translate android:repeatMode="reverse" android:repeatCount="10" xmlns:android="http://schemas.android.com/apk/res/android" android:duration="2000" android:interpolator="@android:anim/bounce_interpolator" android:toYDelta="0" android:toXDelta="200" android:fromYDelta="0" android:fromXDelta="0"> </translate> </set>
6
<?xml version="1.0" encoding="UTF-8"?>
<translate android:interpolator="@android:anim/bounce_interpolator" android:repeatMode="reverse" android:repeatCount="10" android:toYDelta="400" android:fromYDelta="0" android:toXDelta="200" android:fromXDelta="0" android:duration="4000" xmlns:android="http://schemas.android.com/apk/res/android"> </translate>
补间动画有一定的缺陷,按钮移动后点击事件依然在原来的位置,动画效果是通过一些列算法来实现的,所以后来出现属性动画,效果是真实控件的移动变幻。
网友评论