您的位置:首页 > 移动开发 > Android开发

浅谈Android中的基础动画(图文详解)

2015-08-09 20:48 399 查看
大家对Android中的动画应该不陌生吧,也许你正在使用,也许你在使用更高级的动画,也许你正准备尝试使用,尽情地给你的程序加特效吧,相信它一定不会让你失望的,android动画可能很多人认为很简单吧,对,很简单,但是很基础。写下这篇文章主要是为让自己以后复习,希望能帮助有需要的人,本人菜鸟一枚,如有错误,请大家批评指出。不说废话了,直接上.....

一、前言知识准备:

                    .Android中的动画有四种:1、Tween Animation(变换动画);2、FrameAnimation(帧动画)3、Layout Animation(布局动画)4、Property Animation(属性动画)

                    .Android中使用动画的两种方式:1、使用XML文件来设置动画,然后再Activity中加载和开启动画  2、使用java代码直接new一个动画对象,然后通过一些set类的方法设置相应的属性。

二、Tween Animation(变换动画);

      Alpha:渐变透明度动画

      Scale:渐变尺寸缩放动画

      Translate:位置移动动画

      Rotate:旋转动画

注意:以上四种变换动画具有的共同属性:

1、Duration:动画持续的时间(单位:毫秒)

2、fillAfter:设置为true,动画转化在动画结束后被使用

3、fillBefore:设置为true,动画转化在动画开始前被使用

4、interpolator:动画插入器(加速,减速插入器,非匀速的动画)

5、repeatCount:动画重复的次数

6、repeatMode:顺序重复/倒序重复

7、startOffset:动画之间的时间间隔

.AlphaAnimation(透明动画,0.0表示完全透明,1.0表示完全不透明)

     fromAlpha:动画起始时的透明度

     toAlpha:动画终止时的透明度

.ScaleAnimation(缩放动画)

     formX,toX分别是起始时和结束时x坐标上的伸缩尺寸,(fromX表示图片初始时相对于x坐标的尺寸是多少,toX表示图片相对于x坐标运动最后的尺寸是多少)

     fromY,toY分别是起始和结束时y坐标上的伸缩尺寸(fromY表示图片初始时相对于Y坐标的尺寸是多少,toY表示图片相对于Y坐标运动最后的尺寸是多少)

     pivotX,pivotY,分别为启动伸缩动画相对于x,y坐标开始的位置(表示整个图片开始运动动画时相对于x,y坐标的一个起始的位置)

以下是图片详解:


.TranslateAnimation(位移动画)

    fromXDelta,fromYDelta分别为起始时的X,Y的坐标 

    toXDelta,toYDelta分别为结束时的X,Y的坐标

以下是图片详解:



.RotateAnimation(旋转动画)

    fromDegress起始时的角度

    toDegress终止时的角度

    pivotX,pivotY所围绕旋转的中心点的坐标

以下是图片详解:



 

 

二、FrameAnimation(帧动画)(帧动画就是相当于把一张张图片按一定的时间播放出来)

原理是:使用aimation-list标签来分组一个item标签集合

定义显示的图片

指定显示它的时间(毫秒)

这是在drawable文件夹下的anim_list.xml

<?xml version="1.0" encoding="utf-8"?>

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

    <item

        android:drawable="@drawable/one"//图片文件

        android:duration="500"/>//播放图片间隔的时间,单位:毫秒

    <item

        android:drawable="@drawable/two"

        android:duration="500"/>

    <item

        android:drawable="@drawable/three"

        android:duration="500"/>

    <item

        android:drawable="@drawable/four"

        android:duration="500"/>

    <item

        android:drawable="@drawable/five"

        android:duration="500"/>

    <item

        android:drawable="@drawable/six"

        android:duration="500"/>

   <item

        android:drawable="@drawable/seven"

        android:duration="500"/>

   <item

        android:drawable="@drawable/eight"

        android:duration="500"/>

</animation-list>

然后再在java代码中只需要简单1行代码调用就OK了:

当然img是个ImageView对象

 img.setImageResource(R.drawable.anim_list);  

三、Layout Animation(布局动画,这里主要是利用LayoutAnimationController对象来构建动画的,主要的原理是定义一个ListView然后利用LayoutAnimationController给每一个子view(即每个item)添加动画)

为ViewGroup添加动画

使用LayoutAnimationCont roller

protected void onCreate(Bundle savedInstanceState) {

  super.onCreate(savedInstanceState);

  setContentView(R.layout.activity_list_view);

  listview=(ListView) findViewById(R.id.listView);

  List<String> list=new ArrayList<String>();

  for(int i=1;i<=20;i++){

   list.add("动画"+i);

  }

  ArrayAdapter<String>adapter=new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, list);

  listview.setAdapter(adapter);

  LayoutAnimationController lac=new LayoutAnimationController(AnimationUtils.loadAnimation(this, R.anim.layout_anim));

  lac.setOrder(LayoutAnimationController.ORDER_NORMAL);//ORDER_NORMAL表示正序,ORDER_RANDOM表示随机顺序,ORDER_REVERSE表示倒序

  listview.setLayoutAnimation(lac);

  listview.startLayoutAnimation();

 }

}

属性动画由于还没整理好,日后补上,接下来讲下组合动画

如何把我们所学会的变换动画组合起来呢???如何把他们串联起来呢???

主要有两种方法实现:

第一使用AnimationListener监听事件,然后重写AnimationEnd方法:

主要思想:先播放第一个动画效果,然后给第一个动画设置一个动画监听器,当第一个动画结束时,然后再加载

和播放第二个动画,也即是在重写AnimationEnd方法中去AnimationUtils.loadAnimation("动画二");那么三个乃至更多动画组合原理类似

第二使用AnimationSet的一个动画集合,然后使用startOffset(表示动画延迟多长时间播放),

主要思想:

如果,计算好一个动画的播放时间,然后再在第二个动画设置startOffset属性,并赋值延迟时间正好为第一个动画播放的时间,这样自然而然,就把两个动画串联起来

从而形成组合动画,多个动画的组合原理类似

1、组合动画中的循环动画(实现图片闪烁的demo)

注意:利用Animation的setPepeatCount,setRepeatMode来实现循环动画

  AlphaAnimation alpha= new AlphaAnimation(0.1f, 1.0f);

      alpha.setDuration(100);

      alpha.setRepeatCount(20);//设置循环播放的次数

      alpha.setRepeatMode(Animation.REVERSE);//Animation.RESTART表示顺序播放,Animation.REVERSE表示倒序播放

      img.startAnimation(alpha);

2、组合动画之Activity切换动画:

使用overridePendingTransition方法

有两个参数分别是:第二个Activity进入时的动画,第一个Activity退出时的动画

 Intent intent= new Intent(MainActivity.this, MainActivity2.class);

   startActivity(intent);

   overridePendingTransition(R.anim.enter_anim, R.anim.exit_anim);//注意这里的enter_anim是写好的xml动画文件(表示进入第二个Activity的动画),exit_anim是写好的xml文件(表示退出第一个activity的动画)

那今天的Android中的动画知识就这么多了,但是没有详细如何去设置很炫很好看的动画,其实写出很炫的动画,需要去了解一些运动的函数公式,然后运用到动画中会有很多意想不到的特效,而且不会让你失望哦,亲。

PS:Demo源码的下载链接:http://pan.baidu.com/s/1qWNzAYo

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: