视图动画和帧动画

转载请注明出处:http://blog.csdn.net/ZhouLi_CSDN/article/details/45971421

View Animaiton

  • 通常使用xml文件定义动画,这样易读,重用。
  • xml写在res/anim/路径下。
    下面是例子:
<set android:shareInterpolator="false">
    <scale  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" />
    <set android:interpolator="@android:anim/decelerate_interpolator">
        <scale  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" />
        <rotate  android:fromDegrees="0" android:toDegrees="-45" android:toYScale="0.0" android:pivotX="50%" android:pivotY="50%" android:startOffset="700" android:duration="400" />
    </set>
</set>

pivotX:“50”for 50%相对于父视图,“50%”for 50%相对于自己。 使用:

ImageView spaceshipImage = (ImageView) findViewById(R.id.spaceshipImage);
Animation hyperspaceJumpAnimation = AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump);
spaceshipImage.startAnimation(hyperspaceJumpAnimation);

设置动画启动时间:

Animation.setStartTime(), 然后View.setAnimation().
注意:不管动画怎么移动,大小如何变化,拥有动画的视图不会调整自己容纳它,视图会超过他的范围,并且不会被裁减。当超过了它的父view的时候才会发生裁减。

Drawable Animation

类:AnimationDrawable
如果视同xml定义放在res/drawable/路径下:
举例:

<animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="true">
    <item android:drawable="@drawable/rocket_thrust1" android:duration="200" />
    <item android:drawable="@drawable/rocket_thrust2" android:duration="200" />
    <item android:drawable="@drawable/rocket_thrust3" android:duration="200" />
</animation-list>
  • oneShot:设置为true,只播放一次,停止在最后一帧。
  • 设置为false,循环播放。
  • 使用:
    它可以被添加为一个view的background,然后调用启动动画。
  • 举例:
AnimationDrawable rocketAnimation;

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

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

public boolean onTouchEvent(MotionEvent event) {
  if (event.getAction() == MotionEvent.ACTION_DOWN) {
    rocketAnimation.start();
    return true;
  }
  return super.onTouchEvent(event);
}

注意:不能在oncreate方法中使用start()方法,因为AnimationDrawable还没有被关联到window。如果你想让动画启动后就生效,可以在activity的onWindowFocusChanged()方法中start(),当android将你的window设置为focus时会调用。

你可能感兴趣的:(android,动画,scale,帧动画)