逐帧动画就是顺序播放事先准备好的静态图像,利用人眼的”视觉暂留”的原理,给用户选择动画的错觉
list
xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:drawable="@drawable/img001" android:duration="60"
/>
<item android:drawable="@drawable/img002" android:duration="60"
/>
<item android:drawable="@drawable/img003" android:duration="60"
/>
<item android:drawable="@drawable/img004" android:duration="60"
/>
<item android:drawable="@drawable/img005" android:duration="60"
/>
<item android:drawable="@drawable/img006" android:duration="60"
/>
list>
其中,animation-list有一个android:oneshot=”true|false”用来设置是否播放一次,默认为true
补时动画就是通过对场景的对象不断进行图像变化来产生动画效果,在实现补时动画时,只要定
义动画开始和结束的”关键帧”其它过度帧由系统自动计算并补齐.android中提供了4种:透明度渐变动画,
平移动画,旋转动画,缩放动画。
<set xmlns:android="http://schemas.android.com/apk/res/android">
<alpha android:fromAlpha="1"
android:toAlpha="0"
android:fillAfter="true"
android:repeatMode="reverse"
android:repeatCount="1" 变化次数
android:duration="2000"/>
set>
Android:interpolotor
用于控制动画的变化速度,使用动画效果可以匀速,加速,减速或抛物线速度等各种速度变化具体见下表android:interpolotor属性的常用属性值
android:repeatMode
用于设置动画的重复方式,可选择为reverse(反向)或restart(重新开始)
android:repeatCount
用于设置动画的重复次数,属性可以是代表次数的数值,也可以是infinite(无限循环)
android:duration
用于指定donghua持续的时间,单位为毫秒
android:fromAlpha
用于指定动画开始时的透明度,值为0.0代表完全透明 ,值为1.0代表完全不透明
android:toAlpha
用于指定动画结束时的透明度,值为0.0代表完全透明,值为1.0代表完全不透明
旋转动画就是通过为动画指定开始时的旋转角度,结束时的旋转角度,经及持续时间来创建动画,在旋转时还可以通过指定轴心点坐标来改为旋转的中心
<set xmlns:android="http://schemas.android.com/apk/res/android">
<rotate
android:interpolator="@android:anim/accelerate_interpolator"
android:fromDegrees="0"
android:toDegrees="720"
android:pivotX="50%"
android:pivotY="50%"
android:duration="2000">
rotate>
set>
android:interpolotor 用于控制动画的变化速度,使用动画效果可以匀速,加速,减速或
抛物线速度等各种速度变化具体
见表android:interpolotor属性的常用属性值
android:fromDegrees 用于指定动画开始时旋转的角度
android:toDeggrees 用于指定动画结束时旋转的角度
android:pivotX 用于指定轴心点X轴坐标
android:pivotY 用于指定轴心点Y轴坐标
android:repeatMode 用于设置动画的重复方式,可选择为reverse(反向)或restart(重
新开始)
android:repeatCount 用于设置动画的重复次数,属性可以是代表次数的数值,也可以是inf
inite(无限循环)
android:duration 用于指定动画持续的时间,单位为毫秒
就是通过为动画指定开始时报缩放系数,结束时的缩放系数,以及持续时间来他建动画,在缩放时
还可以通过指定轴心点坐标来改变绽放的中心。
<set xmlns:android="http://schemas.android.com/apk/res/android">
<scale android:fromXScale="1"
android:interpolator="@android:anim/decelerate_interpolator"
android:fromYScale="1"
android:toXScale="2.0"
android:toYScale="2.0"
android:pivotX="50%"
android:pivotY="50%"
android:fillAfter="true"10. android:repeatCount="1"
android:repeatMode="reverse"
android:duration="2000"/>
set>
android:interpolotor 用于控制动画的变化速度,使用动画效果可以匀速,加速,减
速或抛物线速度等各种速度变化具体见表android:interpolotor属性的常用属性值
android:fromXScale 用于指定动画开始时水平方向上的缩放系数,值为1.0表示
不变化
android:toXScale 用于指定动画结束时水平方向上的缩放系数,值为1.0表示
不变化
android:fromYScale 用于指定动画开始时垂直方向上的缩放系数,值为1.0表示
不变化
android:toYScale 用于指定动画结束时垂直方向上的缩放系数,值为1.0表示
不变化
android:pivotX 用于指定轴心点X轴坐标
android:pivotY 用于指定轴心点Y轴坐标
android:repeatMode 用于设置动画的重复方式,可选择为reverse(反向)或res
tart(重新开始)
android:repeatCount 用于设置动画的重复次数,属性可以是代表次数的数值,也
可以是infinite(无限循环)
android:duration 用于指定动画持续的时间,单位为毫秒
平稳动画就是通过为动画指定开始时的位置,结束时的位置,经及持续时间来创建动画
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:fromXDelta="0"
android:toXDelta="320"
android:fromYDelta="0"
android:toYDelta="0"
android:fillAfter="true"
android:repeatMode="reverse"
android:repeatCount="1"
android:duration="2000">
translate>
set>
android:interpolotor 用于控制动画的变化速度,使用动画效果可以匀速,加速,减速或
抛物线速度等各种速度变化具体见下表android:interpolotor属性的常用属性值
android:fromXDelta 用于指定动画开始时水平方向上的起始位置
android:toXDelta 用于指定动画结束时水平方向上的起始位置
android:fromYDelta 用于指定动画开始时垂直方向上的起始位置
android:toYDelta 用于指定动画结束时垂直方向上的起始位置
android:repeatMode 用于设置动画的重复方式,可选择为reverse(反向)或restart(重
新开始)
android:repeatCount 用于设置动画的重复次数,属性可以是代表次数的数值,也可以是infinite(无限循环)
android:duration 用于指定动画持续的时间,单位为毫秒
1.帧动画 在drawable
如果不能播放
AnimationDrawable drawable =(AnimationDrawable) view.getbackgroud();
drawable.start();
2.补间动画
- 透明度动画alpha
开始透明度,结束透明度,时间
android:duration=”4000”
android:fillAfter=”true”
android:fromAlpha=”1”
android:toAlpha=”0”
- 旋转动画
android:duration=”4000”
android:fromDegrees=”0”
android:pivotX=”50%”
android:pivotY=”50%”
android:toDegrees=”720”
启动动画
view.startAnimation(anim)
加载动画
AnimationUtils
所有动画都有的属性
fillAfter 动画播放完毕后 停留在最后的动画的状态,不能同时播放帧动画后停止状态
android:repeatCount=”infinite” 次数,可选数值
android:repeatMode=”reverse” 反转 模式 默认重复,
android:interpolator=”@android:anim/bounce_interpolator” 弹球效果,不能在set里面
java代码创建
Animation anim = new ScaleAnimation(0, 1, 0, 1, Animation.RELATIVE_TO_SELF, 0.5f,
Animation.RELATIVE_TO_SELF, 0.5f);
如果没有写TO_SELF,那么针对父窗体
增对activity的进出场动画
overridePendingTransition
必须放在finish或者startactivity还有forResult之后的一句,
也可以设置
@android:style/Animation.Translucent
属性动画
ObjectAnimator
根据改变的值来选择对应的of方法
需要修改的属性,必须有set与get方法。(反射加载)
补间动画监听
anim.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
//开始
}
@Override
public void onAnimationEnd(Animation animation) {
//结束
startActivity(new Intent(MainActivity.this, MyActivity.class));
} @
Override
public void onAnimationRepeat(Animation animation) {
//重放
}
});
效果:
1.先由透明变到清晰,同时旋转,平移到右下角
2.点击从左边慢慢向右边退出
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView tv = (TextView) findViewById(R.id.tv);
//透明度动画
//Animation animation = AnimationUtils.loadAnimation(this,R.anim.anim_alpha);
//旋转动画
// Animation animation = AnimationUtils.loadAnimation(this,R.anim.anim_rotate);
//平移动画
// Animation animation = AnimationUtils.loadAnimation(this,R.anim.anim_translation);
//放缩动画
// Animation animation = AnimationUtils.loadAnimation(this,R.anim.anim_scale);
//自定义动画
Animation animation = AnimationUtils.loadAnimation(this,R.anim.anim_set);
tv.startAnimation(animation);
//tv.startAnimation(getAnimation());
//动画的点击事件
tv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(MainActivity.this,MyAcivity.class));
// overridePendingTransition(R.anim.enter_anim,0);
//点击一下这个布局从左边往右变退出
overridePendingTransition(android.R.anim.slide_in_left,android.R.anim.slide_out_right);
}
});
}
//放缩动画效果,与上面一样
public Animation getAnimation(){
//Animation.RELATIVE_TO_SELF自身
Animation anim = new ScaleAnimation(0,2.5f,0,2.5f,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);
anim.setDuration(3000);
return anim;
}
}
public class MyAcivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Button bt = new Button(this);
setContentView(bt);
bt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
// overridePendingTransition(android.R.anim.fade_out,R.anim.enter_anim);
overridePendingTransition(android.R.anim.fade_in,android.R.anim.fade_out);
}
});
}
}
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main"
android:layout_width="match_parent" android:layout_height="match_parent"
tools:context="com.example.anim_10_27.MainActivity">
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content"
android:id="@+id/tv"
android:background="@mipmap/p14"
/>
RelativeLayout>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<scale
android:duration="3000"
android:fromXScale="0"
android:fromYScale="0"
android:toXScale="1.5"
android:toYScale="1.5" />
<scale
android:duration="3000"
android:fromXScale="1.5"
android:fromYScale="1.5"
android:startOffset="4000"
android:toXScale="1"
android:toYScale="1" />
<alpha
android:duration="7000"
android:fromAlpha="0"
android:toAlpha="1" />
<translate
android:duration="3000"
android:fromXDelta="0"
android:fromYDelta="0"
android:startOffset="3000"
android:toXDelta="100%"
android:toYDelta="100%" />
<rotate
android:duration="3500"
android:fromDegrees="0"
android:pivotX="50%"
android:pivotY="50%"
android:startOffset="1000"
android:toDegrees="720" />
set>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="3000"
android:fromYDelta="0"
android:toYDelta="50%"
android:repeatCount="infinite"
android:repeatMode="reverse"
android:interpolator="@android:anim/bounce_interpolator"/>
set>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromXDelta="0"
android:toXDelta="100%p"
android:duration="3000">
translate>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:fromAlpha="1"
android:toAlpha="0"
android:duration="2000"
android:fillAfter="true">
alpha>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromDegrees="0"
android:toDegrees="720"
android:pivotX="50%"
android:pivotY="50%"
android:repeatCount="infinite"
android:repeatMode="reverse"
android:interpolator="@android:anim/bounce_interpolator"
android:duration="4000">
rotate>
<scale xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="3000"
android:fillAfter="true"
android:fromXScale="0"
android:fromYScale="0"
android:toXScale="1.5"
android:toYScale="1.5">
scale>