android中的动画

Animation动画

安卓动画分为逐帧动画和补间动画

逐帧动画

逐帧动画就是顺序播放事先准备好的静态图像,利用人眼的”视觉暂留”的原理,给用户选择动画的错觉

配置方式XML

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种:透明度渐变动画,
平移动画,旋转动画,缩放动画。

透明度渐变动画(AlphaAnimation)

<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代表完全不透明



android:interpolotor属性的常用属性值

  1. @android:anim/linear_interpolator 动画一直在做匀速改变
  2. @android:anim/accelerate_interpolator 动画一在开始的地方变较慢,然后开始加
  3. @android:anim/decelerate_interpolator 在动画开始的地方改变速度较快,然后开
    始减速
  4. @android:anim/accelerate_decelerate_interpolator 动画在开始和结束的地方
    改变速度较慢,在中间的时候加速
  5. @android:anim/cycle_interpolator 动画循环播放特定的次数,变化速度按正弦
    曲线改变
  6. @android:anim/bounce_interpolator 动画结束的地方采用弹球效果
  7. @android:anim/anticipate_overshoot_interpolator 在动画开始的地方先向后退一
    小步,再开始动画,到结束的地方再超出一小步,最后回到动画结束的地方
  8. @android:anim/overshoot_interpolator 动画快速到达终点,并超出一小步最后回
    到动画结束的地方
  9. @android:anim/anticipate_interpolator 在动画开始的地方先向后退一小步,再快
    速到达动画结束的地方

旋转动画(RotateAnimation)

旋转动画就是通过为动画指定开始时的旋转角度,结束时的旋转角度,经及持续时间来创建动画,在旋转时还可以通过指定轴心点坐标来改为旋转的中心

<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 用于指定动画持续的时间,单位为毫秒

缩放动画(scaleAnimation)

就是通过为动画指定开始时报缩放系数,结束时的缩放系数,以及持续时间来他建动画,在缩放时
还可以通过指定轴心点坐标来改变绽放的中心。

<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 用于指定动画持续的时间,单位为毫秒

平移动画(TranslateAnimation)

平稳动画就是通过为动画指定开始时的位置,结束时的位置,经及持续时间来创建动画

<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 用于指定动画持续的时间,单位为毫秒

Animation

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.点击从左边慢慢向右边退出

MainActivity

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;
    }
}

MyAcivity

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>

anim_set.xml


<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>

anim_translation


<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>

enter_anim.xml


<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromXDelta="0"
     android:toXDelta="100%p"
    android:duration="3000">


translate>

anim_alpha


<alpha xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromAlpha="1"
    android:toAlpha="0"
    android:duration="2000"
     android:fillAfter="true">

alpha>

anim_rotate


<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>

anim_scale


<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>

你可能感兴趣的:(Android)