在动画中一般有三种动画方式:
补间动画;逐针动画;属性动画。
首先补间动画的实现步骤:
1.在res目录下建立文件夹anim
2.在anim文件夹下建立animation.xml动画文件
3.在animation.xml文件中描述某种动画的属性
4.在代码中利用AnimationUtils.loadAnimation方法加载动画文件
5.在代码中用View的startAnimation方法启动动画。
根据动画效果一般为:渐变动画(AlphaAnimation)
渐变动画的属性有:
fromAlpha动画起始时透明度,取值在0.0-1.0之间
toAlpha 动画结束时透明度,取值在0.0-1.0之间
duration 动画持续时间,以毫秒为单位
repeatCount 动画重复次数,这个重复次数不包括第一次播放。
实现代码:
xml文件
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<alpha
android:fromAlpha="0.1"
android:toAlpha="1.0"
android:duration="2000"
android:repeatCount="3"
></alpha>
</set>
java代码:
public void qidong01(View v){
Animation animation = AnimationUtils.loadAnimation(this, R.anim.alpha); //加载xml文件为对象
iv.clearAnimation();
iv.startAnimation(animation); //赋值给ImageView 启动
}
第二种实现方法 只用java代码
//第二个启动动画事件
public void qidong02(View v){
Animation animation;
animation = new AlphaAnimation(0.1f, 1.0f); //设置透明度起点和终点
animation.setDuration(2000); //设置时长
animation.setRepeatCount(2); //设置次数
iv.clearAnimation(); //删除动画
iv.startAnimation(animation); // 启动动画
}
缩放动画(ScaleAnimation)
主要属性有:
fromXScale 动画起始时X坐标上的伸缩倍数0.0表示收缩到没有
fromYScale 动画起始时Y坐标上的伸缩倍数
toXScale 动画终止时X坐标上的伸缩倍数2.0表示扩大2倍
toYScale 动画终止时Y坐标上的伸缩倍数
pivotX X轴上的伸缩参考点
pivotY Y轴上的伸缩参考点50%代表X或Y方向坐标上的中点位置
duration 动画持续时间,以毫秒为单位
repeatCount 动画重复次数,这个重复次数不包括第一次播放。
实现代码:
xml文件代码:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<scale
android:fromXScale="0.0"
android:fromYScale="0.0"
android:toXScale="2.0"
android:toYScale="2.0"
android:pivotX="50%"
android:pivotY="50%"
android:duration="2000"
/>
</set>
java代码:
public void qidong01(View v){
Animation animation = AnimationUtils.loadAnimation(this, R.anim.scale);
iv.clearAnimation();
iv.startAnimation(animation);
}
只用java实现的时候的代码:
public void qidong02(View v){
Animation animation;
animation = new ScaleAnimation(0.0f, 2.0f, 0.0f, 2.0f,
Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); //设置x起点终点,y起点终点,以自身角度以50%的点为参考点扩展
animation.setDuration(2000); //设置时长
animation.setRepeatCount(2); //设置次数
iv.clearAnimation(); //删除动画
iv.startAnimation(animation); // 启动动画
}
平移动画(TranslateAnimation) 一般的主要属性有:
fromXDelta 动画起始时X坐标上的位置
fromYDelta 动画起始时Y坐标上的位置
toXDelta 动画终止时X坐标上的位置
toYDelta 动画终止时Y坐标上的位置
xml文件代码:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:fromXDelta="1080"
android:toXDelta="0"
android:fromYDelta="0"
android:toYDelta="0"
android:duration="2000"
/>
</set>
java代码:
public void qidong01(View v){
Animation animation = AnimationUtils.loadAnimation(this, R.anim.trans);
iv.clearAnimation();
iv.startAnimation(animation);
}
只用java代码实现的时候代码:
public void qidong02(View v){
Animation animation;
animation = new TranslateAnimation(1080.0f, 0.0f, 0.0f, 0.0f); //设置x的起始位置,终止位置;Y的起始位置,终止位置。
animation.setDuration(2000); //设置时长
animation.setRepeatCount(2); //设置次数
iv.clearAnimation(); //删除动画
iv.startAnimation(animation); // 启动动画
}
旋转动画(RotateAnimation) 主要属性
fromDegrees 动画起始时的角度
toDegrees 动画终止时的角度
pivotX 旋转围绕点的X轴上相对位置,50% 代表自己的中点
pivotY 旋转围绕点的Y轴上相对位置,50% 代表自己的中点
实现代码:
xml文件的代码:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:fromXDelta="1080"
android:toXDelta="0"
android:fromYDelta="0"
android:toYDelta="0"
android:duration="2000"
/>
</set>
java代码:
public void qidong01(View v){
Animation animation = AnimationUtils.loadAnimation(this, R.anim.rotate);
iv.clearAnimation();
iv.startAnimation(animation);
}
只用java代码实现的代码“
public void qidong02(View v){
Animation animation;
animation = new RotateAnimation(0, 360, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); //设置起始角度,终止角度,相对于自己,中点,相对于自己,中点
animation.setDuration(2000); //设置时长
animation.setRepeatCount(2); //设置次数
iv.clearAnimation(); //删除动画
iv.startAnimation(animation); // 启动动画
}<pre name="code" class="html">
逐针动画(FrameAnimation)
实现步骤:
1.在drawable目录下放置动画帧图片
2.在drawable文件夹下建立animation.xml动画文件
3.在animation.xml文件中描述每一帧
4.在代码中利用view.setBackgroundResource方法加载动画文件
5.在代码中用AnimationDrawable的start()方法启动动画xml文件代码:
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="false">
<item android:drawable="@drawable/loading_1" android:duration="80" />
<item android:drawable="@drawable/loading_2" android:duration="80" />
<item android:drawable="@drawable/loading_3" android:duration="80" />
<item android:drawable="@drawable/loading_4" android:duration="80" />
<item android:drawable="@drawable/loading_5" android:duration="80" />
<item android:drawable="@drawable/loading_6" android:duration="80" />
<item android:drawable="@drawable/loading_7" android:duration="80" />
<item android:drawable="@drawable/loading_8" android:duration="80" />
</animation-list>
java代码:
public void qidong01(View v){
iv.setBackgroundResource(R.drawable.fram);
AnimationDrawable animationable = (AnimationDrawable) iv.getBackground();
animationable.start();
}
只用代码实现:
public void qidong02(View v){
AnimationDrawable animationDrawable = new AnimationDrawable();//帧动画对象
iv.setBackgroundDrawable(animationDrawable);//设置组件背景
String packageName = this.getApplicationContext().getPackageName();//获取当前包名
for (int i = 1; i <= 8; i++) {
//从图片名称反射资源ID
int id = this.getResources().getIdentifier("loading_"+i, "drawable", packageName);
Drawable frame = this.getResources().getDrawable(id);//得到动画帧的对象
animationDrawable.addFrame(frame, 80);//添加帧,设定时间间隔
}
animationDrawable.setOneShot(false);// 只运行一次,false-无限循环
animationDrawable.start();// 开始播放
}