Android_之动画1

    近一周以来一直在搞android动画,被android动画搞的焦头烂额,不过最艰难的时间已经过去,现在写一篇博客,来给自己做一个梳理和总结。

创新互联公司是一家专注于成都网站建设、网站制作与策划设计,吉州网站建设哪家好?创新互联公司做网站,专注于网站建设十载,网设计领域的专业建站公司;建站业务涵盖:吉州等地区。吉州做网站价格咨询:18982081108

    Android 3.0以后新增了属性动(property animation),至此Android包含三种动画类型,即补间动画(Tween Animation),逐帧动画(Drawable animation),属性动画(Property animation),今天这篇博客着重对属性动画做一个详细阐述。

  1.      补间动画(Tween Animation)

    补间动画类似于之前学过的Flash动画,设定好初始帧和结束帧以后,中间的值由系统自动进行插值,然后可以形成一种动画效果,补间动画需要用户设定好初始值和结束值,系统自动计算之间值。对于这种动画来说,建议用户使用XML文件配置动画,anim.xml文件应存放于res/anim文件夹下,xml文件必须以作为根元素。官方文件中提供的xml示例代码:


          android:interpolator="@android:anim/accelerate_decelerate_interpolator"
       android:fromXScale="1.0"
       android:toXScale="1.4"
       android:fromYScale="1.0"
       android:toYScale="0.6"
       android:pivotX="50%"
       android:pivotY="50%"
       android:fillAfter="false"
       android:duration="700"/>
   
                  android:fromXScale="1.4"
           android:toXScale="0.0"
           android:fromYScale="0.6"
           android:toYScale="0.0"
           android:pivotX="50%"
           android:pivotY="50%"
           android:startOffset="700"
           android:duration="400"
           android:fillBefore="false"/>
                  android:fromDegrees="0"
           android:toDegrees="-45"
           android:toYScale="0.0"
           android:pivotX="50%"
           android:pivotY="50%"
           android:startOffset="700"
           android:duration="400"/>
   

让动画跑起来也是十分简单的,定义好动画xml文件以后,使用如下代码使用对象和动画的绑定

ImageView spaceshipImage = (ImageView) findViewById(R.id.spaceshipImage);Animation hyperspaceJumpAnimation = AnimationUtils.loadAnimation(this, 动画文件);spaceshipImage.startAnimation(hyperspaceJumpAnimation);

  补间动画只是启动空间显示的位置,但是没有移动或者改变空间在布局当中实际文字,例如一个Button在空间中的位置(100,100),X轴方向移动n个单位以后,Button实际位置依然在(100,100)。 

2. 逐帧动画(Frame animation)

    逐帧动画类似于电影播放的原理,一个图片资源代表一帧,以一定时间间隔进行切换图片资源,形成一种动画效果。一般情况下,逐帧动画也是通过xml文件定义的,下面是官方提供的一个示例代码:

   android:oneshot="true">
   
   
   

其中有一个属性是非常重要的,android:oneshot="true",若为true,则代表动画完成以后,停留在最后一帧,反之停留在第一帧。

让动画开始也是非常简单的,看官方代码:

AnimationDrawable rocketAnimation;

publicvoid onCreate(Bundle savedInstanceState){
 super.onCreate(savedInstanceState);
  setContentView(R.layout.main);

 ImageView rocketImage=(ImageView) findViewById(R.id.rocket_p_w_picpath);
  rocketImage.setBackgroundResource(R.drawable.rocket_thrust);
  rocketAnimation=(AnimationDrawable) rocketImage.getBackground();
}

publicboolean onTouchEvent(MotionEventevent){
 if(event.getAction()==MotionEvent.ACTION_DOWN){
    rocketAnimation.start();
   returntrue;
 }
 returnsuper.onTouchEvent(event);
}

有一点是非常重要的,不能在onCreate()函数中启动动画,因为在OnCreate函数中,AnimationDrawable还没有完全和window连接起来,所以如果你想一开始就加载动画,可以在 onWindowFocusChanged()  启动动画。


网页标题:Android_之动画1
浏览地址:http://scyanting.com/article/ihdjpc.html