补间动画和帧动画

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_38641552/article/details/76335625

1、Animations介绍
Android提供了几种动画类型:View Animation、Drawable Animation、Property Animation。View Animation相当简单,分别是Tween动画和Frame动画。Tween动画通过场景里的对象不断的进行图片的变化,比如平移、渐变、缩放、旋转等来产生动画效果;Frame动画叫做顺序播放实现做好的1图像和电影类似。另外加上gif动画,因为如果直接使用Bitmap或其他1方法直接调用gif图片资源的话,显示的是静态的,如果要做成动态的,就需要一些其他的方法来实现。

2、Tween动画
首先来谈谈Tween动画,它有四种:
1、Alpha:渐变透明度动画
2、Scale:渐变尺寸伸缩动画
3、Translate:动画转换位置位移动画
4、Rotate:画面转移旋转动画
这些动画的执行步骤都差不多:先定义Animation动画对象,然后设置动画1的一些属性,最后通过startAnimation()方法开始动画。
setDuration(long durationMillis)方法
功能:设置动画显示的时间
参数:durationMillis为动画显示时间的长短,以毫秒为单位。
startAnimation(Animation animation)方法
功能:开始播放动画
参数:animation为要播放的动画

  第一种:Alpha
     (1)通过xml来新建动画alpha_anim.xml。在res/anim目录下
    <?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="3000"/>
         </set>
     加载动画资源文件
    Animation alpha = AnimationUtils.loadAnimation(MainActivity.this,R.anim.alpha_anim);
     (2)直接在程序中创建动画:
     创建Alpha动画:
    Animation alphaAnimations = new AlphaAnimation(0.0f,1.0f);
 第二种:Scale
    ScaleAnimation(float fromX,float toX,float fromY,float toY,int pivotType,float XValue,int pivotType,float pivotYValue)
     功能:创建一个渐变尺寸伸缩动画
     参数:fromX、toX分别是起始和结束时x坐标上的伸缩尺寸。fromY、toY分别是起始和结束时y坐标上的伸缩尺寸。pivotXValue、pivotYValue分别为伸缩动画相对于x,y坐标开始的位置(相当于图片右上角的位置),pivotXType、pivotYType分别为x、y的伸缩模式。
   <?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="1.0" android:toYScale="1.0"
               android:fillAfter="false" android:duration="3000"
               android:pivotX="50%" android:pivotY="50%"/>
         </set>
     开始伸缩动画
Animation scale = AnimationUtils.loadAnimation(MainActivity.this,R.anim.scale_anim);
         ImageView iv = (ImageView) v;
         iv.startAnimation(scale);
 第三种:Translate
TranslateAnimation(float fromXDelta,float toXDelta,float fromYDelta,float toYDelta)
     功能:创建一个移动画面位置的动画
     参数:fromXDelta、fromYDelta分别是开始坐标,toXDelta、toYDelta分别是结束坐标
<?xml version="1.0" encoding="utf-8"?>
         <set xmlns:android="http://schemas.android.com/apk/res/android">
            <translate android:duration="3000" android:fromXDelta="0" android:fromYDelta="0"
               android:toXDelta="300" android:toYDelta="300"/>
         </set>
     开始移动动画
Animation translate = AnimationUtils.loadAnimation(MainActivity.this,R.anim.translate_anim);
         ImageView iv = (ImageView) v;
         iv.startAnimation(translate);
 第四种:Rotate
    Rotate(float fromDegress,float toDegress,int pivotXType,float pivotXValue,int pivotYType,float pivotYValue)
     功能:创建一个旋转画面的动画
     参数:fromDegress为开始的角度,toDegress为结束的角度。pivotXTyp、pivotYType分别为x、y的伸缩模式,pivotXValue、pivotYValue分别为伸缩动画相对于x、y的坐标开始位置
    <?xml version="1.0" encoding="utf-8"?>
         <set xmlns:android="http://schemas.android.com/apk/res/android">
            <rotate android:duration="3000" android:fromDegrees="0"
                android:toDegrees="360" android:pivotX="50%" android:pivotY="50%"/>
         </set>
3、Frame动画
   Frame动画其实就是逐帧动画,用法也比Tween动画简单,只需要创建一个AnimationDrawable对象来表示Frame动画,然后通过addFrame方法把每一个帧要显示的内容加进去就行了,最后通过start方法就可以播放这个动画了,还可以通过使用setOneShot()方法来设置动画是否重复播放。在这里,还需要设置图片的所在位置,首先要在res/anim目录下创建一个xml配置文件。用来存放图片资源的索引配置的是一个以<animation-list>根元素和<item>子元素。
     <?xml version="1.0" encoding="utf-8"?>
        <animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="true">
           <item android:drawable="@drawable/list1" android:duration="300"/>
           <item android:drawable="@drawable/list2" android:duration="300"/>
           <item android:drawable="@drawable/list3" android:duration="300"/>
        </animation-list>
        其中android:oneshot="true"表示这个动画只播放一次。
        AnimationDrawable animationDrawable = (AnimationDrawable) imageView2.getDrawable();
        animationDrawable.start();
        animationDrawable.stop();
展开阅读全文

没有更多推荐了,返回首页