Android Day11 - 动画

简介:

Android中常见的动画有:帧动画、补间动画、属性动画


个个击破:

1.帧动画(Drawable Animation)

   通过加载一些图片资源,将它们按顺序展示出来,就像放电影一样。通过AnimationDrawable这个

 类来实现。实现步骤:

 1)创建res/drawable/目录,即在res文件夹下创建drawable文件夹。

   将准备加载的图片资源放到drawable文件夹下,并在drawable目录下新建一个XML文件,用来链

 接资源并定义动画的属性,格式如下:

1
2
3
4
5
6
7
<? 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/girl_1"  android:duration = "200"  />
     ...
</ animation-list >

  oneshot属性表示是否循环播放动画

  duration属性表示每张图片显示的时长,单位毫秒。

 2)将XML与ImageView结合并得到动画对象

   这是初始化动作,一般放在Activity的onCreate方法中。

1
2
   iv_play.setBackgroundResource(R.drawable.my_anim2);
   final  AnimationDrawable animation = (AnimationDrawable) iv_play.getBackground();

 3) 开始动画

1
2
3
4
5
6
  new  Thread(){
     public  void  run() {
           SystemClock.sleep( 1000 );
           animation.start();
      };
  }.start();

   官方文档着重强调了start()方法不能写在Activity的onCreate方法中,你可以在Activity的

  onWindowFocusChanged方法中调用start方法。

   其实呢,官方文档的这种说法不是特别准确。准确地来说,不是start方法不能在Activity的

  onCreate方法中执行,而是start方法不能执行太快,因为动画可能还没有附加到Activity上。   

   如果非要在在Activity的onCreate方法中执行,只有单独给start()方法创建一个子线程,让线程

  sleep一小会儿,就达到了延迟执行start方法的目的。

   这个就和MediaPlayer的start方法很相似,原理基本是一样的。  


2.补间动画(View Animation)

   补间动画就是在View对象上完成一些位置、大小、旋转、透明的变化,从而形成动画的效果。虽然

 View出现了动画,但是并没有改变控件的真正坐标

   通过查阅官方文档,发现View有一个方法startAnimation,说明任何的View的对象都可以实现补间

 动画的效果。

   和Day10多媒体学的Matrix矩阵定义图片几种效果相似,补间动画有有5种:

   wKioL1W9cNWTuMeNAADOQQq0gFc270.jpg

   上面这5个动画类,都是Animation的子类。根据动画的对象的获取方式不同,补间动画分为2类。

   2-1:动画的获取

     第1种方式)通过构造函数来构造动画对象

        XxxAnimation xxx = new XxxAnimation(指定动画的参数,不同的动画不一样。);  

        xxx.setYyy(设置持续时长、重复次数、重复模式等属性);


        动画合集对象的获取

      AnimationSet set = new AnimationSet(true);

      set.add(XxxAnimation);    //可以添加任意多个动画,也可以再是合集。


      ■绽放动画 + 透明动画合集

        缩放:就是宽高的变化

            new ScaleAnimation(fromX, toX, fromY, toY, pivotXType, pivotXValue, pivotYType, pivotYValue);

            fromX:表示缩放开始的宽1.0f表示控件原始宽,0.5f表示控件原始宽的一半。

            toX:表示缩放结束的宽1.0f表示控件原始宽,0.5f表示控件原始宽的一半。

            fromY:表示缩放开始的高1.0f表示控件原始宽,0.5f表示控件原始高的一半。

            toY:表示缩放结束的高1.0f表示控件原始高,0.5f表示控件原始高的一半。

            pivotXType,pivotYType:缩放基点X和Y的坐标参考系

                RALATIVE_TO_SELF,表示以自身为参考    

                RALATIVE_TO_PARENT,表示以父控件为参考

                ABSOLUTE,以绝对坐标系为参考,即屏幕

            pivotXValue,pivotYValue:绽放基点X坐标和Y坐标

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// 得到气泡的视图
     View view_popWindow = View.inflate(getBaseContext(),
     R.layout.view_g3_appmanager_popwindow,  null );
 
// 为气泡设置动画合集 透明 + 缩放
     AlphaAnimation alphaAnimation =  new  AlphaAnimation( 0 .3f,  1 .0f);
     alphaAnimation.setDuration( 200 );
 
         
     ScaleAnimation scaleAnimation =  new  ScaleAnimation( 0 .5f,  1 .0f,
         0 .5f,  1 .0f, Animation.RELATIVE_TO_SELF,  0 ,
             Animation.RELATIVE_TO_SELF,  0 .5f);
     scaleAnimation.setDuration( 200 );
 
     AnimationSet animationSet =  new  AnimationSet( true );
     animationSet.addAnimation(alphaAnimation);
     animationSet.addAnimation(scaleAnimation);
     view_popWindow.startAnimation(animationSet);

        

     第2种方式)通过AnimationUtils这个工具类来获取动画对象

        首先,应创建res/anim/这个目录,即在res文件夹下新建一个anim文件夹。

          新建动画的XML文件,用上面列出的标签,定义动画的参数和属性。

        其次,在java代码获取XML动画资源  

          Animation aa = AnimationUtils.loadAnimation(上下文对象, R.anim.XML文件名);

       

       官方文档有这样一句十分重要的话:As with defining a layout, an XML file is 

        recommended because it's more readable,  reusable, and swappable than 

       hard-coding the animation。它的意思推荐开发者使用这种方式定义补间动画,因为它

       的阅读性、利用性、交换性(没有明白)比较强。


        android Animation动画的xml使用 http://www.2cto.com/kf/201411/352237.html


   2-2:动画的启动

      与帧动画的启动方式不一样,帧动画是直接通过动画对象来启动的,而补间动画的启动是通过

    View对象的startAnimation方法启动的。

1
       iv_show.startAnimation(aa);


3.属性动画(Property Animation)  

   API11以上版本才可以使用,可以使用nineoldandroids-2.4.0.jar包

       ViewHolder.setXxx(View,)

   来设置View的属性动画来兼容低版本手机。   

   官方文档花了很大的篇幅来说属性动画,说它的功能十分的强大,还将其与补间动画作了一下

 比较。其实顾名思义,我们就能明白属性动画的特点。与补间不同,补间动画只是纯粹地让View对

 象产生动画的效果,本身View对象没有发生任何的改变。而属性动画不仅可以让View对象,也可以让

 not-view对象产生动画效果,而且最重要的一点,属性动画会修改对象的属性

    View.setXxx()

    

   属性动画常和类型估值器TypeEvaluator(和值动画一样都位于android.animation包下)一起使用

    ArgbEvaluator    颜色过度器

    。。。

    wKioL1Xy5Uij_51xAADE-ZG59i0607.jpg 


4.属性动画

  Android属性动画深入分析:让你成为动画牛人 http://www.2cto.com/kf/201401/270169.html

   Android 动画详解之属性动画(Property Animation) http://www.2cto.com/kf/201411/353170.html


   4-1.值动画(ValueAnimator )      API11之后方可使用

   //利用静态方法创建值动画对象

        ValueAnimator animator = ValueAnimator.ofFloat(0.0f,1.0f); 

   

        animator.addUpdateListener(new AnimatorUpdateListener() {

    @Override

    public void onAnimationUpdate(ValueAnimator animation) {

float percent = (Float) animation.getAnimatedValue();

//根据这个百分比,做自己想做的事情。

    }

         });

        //持续时长

animator.setDuration(500);


        //插值器  

        //Overshoot   橡皮筋效果,过了又弹回来

        //CycleInterpolator  循环加速器,让动画连续执行多次

animator.setInterpolator(new OvershootInterpolator(2));

animator.start();





      本文转自屠夫章哥  51CTO博客,原文链接:http://blog.51cto.com/4259297/1679852,如需转载请自行联系原作者



相关文章
|
8月前
|
Android开发
Android RecyclerView 使用大全 - 基础使用,item 动画,下拉刷新等(三)
Android RecyclerView 使用大全 - 基础使用,item 动画,下拉刷新等
|
10天前
|
Java Android开发
Android Mediatek 延迟停止启动动画和通知SurfaceFlinger(Android正在启动)
Android Mediatek 延迟停止启动动画和通知SurfaceFlinger(Android正在启动)
12 0
|
27天前
|
Java Android开发
Android开发之使用OpenGL实现翻书动画
本文讲述了如何使用OpenGL实现更平滑、逼真的电子书翻页动画,以解决传统贝塞尔曲线方法存在的卡顿和阴影问题。作者分享了一个改造后的外国代码示例,提供了从前往后和从后往前的翻页效果动图。文章附带了`GlTurnActivity`的Java代码片段,展示如何加载和显示书籍图片。完整工程代码可在作者的GitHub找到:https://github.com/aqi00/note/tree/master/ExmOpenGL。
30 1
Android开发之使用OpenGL实现翻书动画
|
8月前
|
Android开发
Android RecyclerView 使用大全 - 基础使用,item 动画,下拉刷新等(二)
Android RecyclerView 使用大全 - 基础使用,item 动画,下拉刷新等
|
4月前
|
XML 开发工具 Android开发
Android动画效果-更新中
Android动画效果-更新中
59 1
|
5月前
|
XML Android开发 数据格式
[Android]动画
[Android]动画
36 0
|
5月前
|
API Android开发 开发者
【Android App】Vulkan实现宇宙中旋转雷达动画效果(附源码和原始视频 超详细必看)
【Android App】Vulkan实现宇宙中旋转雷达动画效果(附源码和原始视频 超详细必看)
69 1
|
5月前
|
XML 小程序 Java
【Android App】给三维魔方贴图以及旋转动画讲解和实战(附源码和演示视频 超详细必看)
【Android App】给三维魔方贴图以及旋转动画讲解和实战(附源码和演示视频 超详细必看)
34 0
|
5月前
|
XML Java Android开发
Android App开发手机阅读中实现平滑翻书效果和卷曲翻书动画实战(附源码 简单易懂 可直接使用)
Android App开发手机阅读中实现平滑翻书效果和卷曲翻书动画实战(附源码 简单易懂 可直接使用)
83 0
|
5月前
|
XML Java Android开发
Android App开发手机阅读中贝塞尔曲线的原理讲解及实现波浪起伏动画实战(附源码和演示视频 可直接使用)
Android App开发手机阅读中贝塞尔曲线的原理讲解及实现波浪起伏动画实战(附源码和演示视频 可直接使用)
48 0