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

来源:互联网 发布:mac没有鼠标怎么右键 编辑:程序博客网 时间:2024/05/21 07:52

大家对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

 

1 0
原创粉丝点击