美文网首页我爱编程
android中三种动画的简单介绍

android中三种动画的简单介绍

作者: 墨月城汐 | 来源:发表于2017-05-04 16:22 被阅读0次

    前言  

    在学习了Android的动画之后,简单总结了一下,看完这篇文章就可以自己动手写一个简单的动画了

    正文

    Android中的动画可分为三种:

    1、逐帧动画 FrameAnimation

    2、补间动画 TweenAnimation

    3、属性动画 PropertyAnimation

    本文就来简单的介绍一下这三种动画

    一、逐帧动画:FrameAnimation

              每一张静止的动画依次显示出来。利用人眼暂时停留的错觉,得出的动画。

    首先在drawable文件中添加文件。资源文件一般存放在res/drawable/目录当中。

    帧动画的使用步骤

    1、在drawable文件夹下创建帧动画的资源文件frame_animlist.xml 代码如下:

    <animation-listxmlns:android="http://schemas.android.com/apk/res/android">

    <item

              android:drawable="@drawable/icon_open"

              android:duration="200"/>

    <item

              android:drawable="@drawable/icon_hell"

              android:duration="200"/>

    </animation-list>

    其中:

              duration:表示持续的时间

              设置android:oneshot="false":设置为true:就表示指定的图片只切换一次

                                                         设置为false:就表示指定的item图片无限切换。默认为无限切换

    2、在布局文件中用ImageView控件作为动画载体来显示动画,可设置两个button按钮来开启和停止动画

    <ImageView

    android:id="@+id/iv"

    android:layout_width="wrap_content"

    android:layout_height="wrap_content"

    android:layout_centerInParent="true"/>

    <Button

    android:id="@+id/bt_start"

    android:layout_width="wrap_content"

    android:layout_height="wrap_content"

    android:layout_alignParentBottom="true"

    android:text="start"/>

    <Button

    android:id="@+id/bt_stop"

    android:layout_width="wrap_content"

    android:layout_height="wrap_content"

    android:text="stop"

    android:layout_alignParentBottom="true"

    android:layout_toRightOf="@+id/bt_start"

    android:layout_toEndOf="@+id/bt_start"

    android:layout_marginLeft="26dp"

    android:layout_marginStart="26dp"/>

    3、在java代码中设置控件的背景为动画资源文件。

    iv. setBackgroundResource();

    4、声明动画管理器,AnimationDrawable,通过获得控件的背景,对其进行初始化。

    AnimationDrawable  anima;//声明一个动画管理器对象

    mImageView.setBackgroundResource(R.drawable.frame_animlist);

    anima= (AnimationDrawable)mImageView.getBackground();

    5、调用动画管理器的start,stop。开启和停止动画。

    完整代码如下:

    public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private ImageView mImageView;

    private Button mBtStart,mBtStop;

    private AnimationDrawable anima;

    @Override

    protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    mImageView= (ImageView) findViewById(R.id.iv);

    mBtStart= (Button) findViewById(R.id.bt_start);

    mBtStop= (Button) findViewById(R.id.bt_stop);

    mImageView.setBackgroundResource(R.drawable.frame_animlist);

    anima= (AnimationDrawable)mImageView.getBackground();

    mBtStart.setOnClickListener(this);

    mBtStop.setOnClickListener(this);

    }

    @Override

    public voidonClick(View view) {

    switch(view.getId()){

    caseR.id.bt_start:

    anima.start();

    break;

    caseR.id.bt_stop:

    anima.stop();

    break;

    default:

    break;

    }

    }

    }

    二、补间动画:TweenAnimation

    补间动画是指开发者只需要提供动画开始和结束的关键帧,二动画中间变化的帧,由系统计算,自己补充完整

    资源文件一般存放在res/anim/目录当中。

    提供了4中变化的方式。

    位移的改变,旋转,透明度,大小缩放动画。

    <translate . . ./>

    <rotate . . ./>

    <alpha . . ./>

    <scale . . ./>

    可以指定动画变化的时间,和动画变化的速度。

    补间动画的使用步骤:

    1、在drawable文件夹下创建anim文件夹,在anim文件夹下创建对应的变化方式的xml文件

    a、translate_anim.xml:(位移的改变)

    <translate  xmlns:android="http://schemas.android.com/apk/res/android"

    android:interpolator="@android:anim/accelerate_decelerate_interpolator"

    android:fromXDelta="0"

    android:toXDelta="300"

    android:fromYDelta="0"

    android:toYDelta="0"

    android:duration="2000"/>

    其中:

    android:interpolator 动画的渲染器

    fromXDelta  动画起始位置的横坐标

    toXDelta    动画起结束位置的横坐标

    fromYDelta  动画起始位置的纵坐标

    toYDelta  动画结束位置的纵坐标

    duration 动画的持续时间-->

    b、rotate_anim.xml:(旋转)

    <rotatexmlns:android="http://schemas.android.com/apk/res/android"

    android:interpolator="@android:anim/accelerate_decelerate_interpolator"

    android:fromDegrees="0"

    android:toDegrees="360"

    android:duration="1000"

    android:repeatCount="1"

    android:repeatMode="restart"/>

    其中:

    fromDegrees:表示旋转的起始角度

    toDegrees:表示旋转的结束角度

    repeatCount:旋转的次数  默认值是0 代表旋转1次  如果值是repeatCount=4 旋转5次,值为-1或者infinite时,表示补间动画永不停止

    repeatMode 设置重复的模式。默认是restart。当repeatCount的值大于0或者为infinite时才有效。

    repeatCount=-1 或者infinite 循环了

    还可以设成reverse,表示偶数次显示动画时会做与动画文件定义的方向相反的方向动行。-->

    c、alpha_anim.xml(透明度):

    <alphaxmlns:android="http://schemas.android.com/apk/res/android"

    android:interpolator="@android:anim/accelerate_decelerate_interpolator"

    android:fromAlpha="1.0"

    android:toAlpha="0.1"

    android:duration="2000"/>

    其中:

    fromAlpha :表示起始透明度

    toAlpha:表示结束透明度

    1.0表示完全不透明

    0.0表示完全透明

    d、scale_anim.xml:(大小缩放动画)

    <scalexmlns:android="http://schemas.android.com/apk/res/android"

    android:interpolator="@android:anim/accelerate_interpolator"

    android:fromXScale="0.2"

    android:toXScale="1.5"

    android:fromYScale="0.2"

    android:toYScale="1.5"

    android:pivotX="50%"

    android:pivotY="50%"

    android:duration="2000"/>

    其中

    fromXScale:表示沿着x轴缩放的起始比例

    toXScale:表示沿着x轴缩放的结束比例

    fromYScale:表示沿着y轴缩放的起始比例

    toYScale:表示沿着y轴缩放的结束比例

    pivotX、pivotY 表示图片大小缩放轴点

    2、在布局文件中用ImageView控件作为动画载体来显示动画,同样可设置button按钮来显示不同的动画

    3、声明Animation

    Animation animation= AnimationUtils.loadAnimation(this,R.anim.translate_anim);;

    animation.setRepeatCount(Animation.INFINITE);//循环显示

    mImageView.startAnimation(animation);

    补充:当然可以将这些动画设置在一起在anim文件夹下创建all_anim.xml使这些动画同时实现

    完整代码如下:

    public class MainActivity extends AppCompatActivity implementsView.OnClickListener {

    private ImageView mImageView;

    private Button mBtTranslate,mBtRotate,mBtScale,mBtAlpha,mBtAll;

    private Animationanimation;

    @Override

    protected void  onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    mImageView= (ImageView) findViewById(R.id.iv);

    mBtTranslate= (Button) findViewById(R.id.bt_translate);

    mBtRotate= (Button) findViewById(R.id.bt_rotate);

    mBtScale= (Button) findViewById(R.id.bt_scale);

    mBtAlpha= (Button) findViewById(R.id.bt_alpha);

    mBtAll= (Button) findViewById(R.id.bt_all);

    mBtTranslate.setOnClickListener(this);

    mBtRotate.setOnClickListener(this);

    mBtScale.setOnClickListener(this);

    mBtAlpha.setOnClickListener(this);

    mBtAll.setOnClickListener(this);

    }

    @Override

    public void  onClick(View view) {

    switch(view.getId()){

    caseR.id.bt_translate:

    animation= AnimationUtils.loadAnimation(this,R.anim.translate_anim);

    break;

    caseR.id.bt_rotate:

    animation= AnimationUtils.loadAnimation(this,R.anim.rotate_anim);

    break;

    caseR.id.bt_scale:

    animation= AnimationUtils.loadAnimation(this,R.anim.scale_anim);

    break;

    caseR.id.bt_alpha:

    animation= AnimationUtils.loadAnimation(this,R.anim.alpha_anim);

    break;

    caseR.id.bt_all:

    animation= AnimationUtils.loadAnimation(this,R.anim.all_anim);

    }

    animation.setRepeatCount(Animation.INFINITE);//循环显示

    mImageView.startAnimation(animation);

    }

    }

    三、属性动画 :PropertyAnimation

    补间动画的增强版

    属性动画的两大特点:

    1、可以定义任何属性的变化

    2、可以对任何对象执行动画

    属性动画能够定义的属性:

    1、动画的持续时间

    2、动画的插入方式

    3、动画的重复次数

    4、动画的行为

    5、动画集

    6、每一帧刷新的频率

    . . . . . . . .

    属性动画的使用步骤:

    1、在drawable文件夹下创建animator文件夹,在animator文件夹下创建对应的object_anim_x.xml文件 内容如下:

    <objectAnimator  xmlns:android="http://schemas.android.com/apk/res/android"

    android:propertyName="scaleX"  //想要变化的属性名称

    android:duration="5000"  //改变的时间

    android:valueType="floatType"  //改变的值的类型

    android:valueFrom="1.0"  //改变前的值

    android:valueTo="3.0">    //改变后的值

    </objectAnimator>

    2、同样的需要一个ImageView控件作为动画载体来显示动画

    3、声明ObjectAnimator

    ObjectAnimator  objectAnimation = (ObjectAnimator) AnimatorInflater.loadAnimator(this,

    R.animator.object_anim_x);

    objectAnimation . setTarget(mImageView);

    objectAnimation . start();

    完整代码如下:

    public class MainActivity extends AppCompatActivity {

    privateImageViewmImageView;

    @Override

    protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    mImageView= (ImageView) findViewById(R.id.iv);

    ObjectAnimator objectAnimation = (ObjectAnimator) AnimatorInflater.loadAnimator(this,

    R.animator.object_anim_x);

    objectAnimation . setTarget(mImageView);

    objectAnimation . start();

    }

    }

    属性动画很强大,这里只列举了其中一种,补间动画能够对View进行位移的改变,旋转,透明度和大小缩放,但是一旦超过这四种动画补间动画就无能为力了,此时我们可以使用属性动画来实现我们想要达到的效果。属性动画相当于补间动画的增强版,是3.0后推出的动画,使用简单、容易实现,当然也有一定的局限性,就是需要3.0以上的API支持,限制较大。

    相关文章

      网友评论

        本文标题:android中三种动画的简单介绍

        本文链接:https://www.haomeiwen.com/subject/lvbrtxtx.html