Android animation动画效果笔记

来源:互联网 发布:ubuntu 16.04重装unity 编辑:程序博客网 时间:2024/05/20 22:04

Android的animation由四种类型组成:

XML中

alph 渐变透明度动画效果
scale 渐变尺寸伸缩动画效果
translate 画面转换位置移动动画效果
rotate 画面转移旋转动画效果

JavaCode中

AlphaAnimation 渐变透明度动画效果
ScaleAnimation 渐变尺寸伸缩动画效果
TranslateAnimation 画面转换位置移动动画效果
RotateAnimation 画面转移旋转动画效果

在XML文件中定义动画

步骤如下:

1.在res目录中新建anim文件夹

2.在anim目录中新建一个my_anim.xml(注意文件名小写)

3.在 my_anim.xml 加入动画代码

1.alph

<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android" >    <alpha        android:duration="1000"        android:fromAlpha="0.0"        android:toAlpha="1.0" />    <!--        --></set>
 透明度控制动画效果 alpha    浮点型值:        fromAlpha 属性为动画起始时透明度        toAlpha   属性为动画结束时透明度        说明:             0.0表示完全透明            1.0表示完全不透明        以上值取0.0-1.0之间的float数据类型的数字    长整型值:        duration  属性为动画持续时间        说明:                 时间以毫秒为单位

2.scale

<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android" >    <scale        android:duration="1000"        android:fillAfter="false"        android:fromXScale="0.0"        android:fromYScale="0.0"        android:interpolator="@android:anim/accelerate_decelerate_interpolator"        android:pivotX="50%"        android:pivotY="50%"        android:toXScale="1.4"        android:toYScale="1.4" /></set>
 缩放动画效果 scale   属性:interpolator 指定一个动画的插入器    在我试验过程中,使用android.res.anim中的资源时候发现    有三种动画插入器:        accelerate_decelerate_interpolator  加速-减速 动画插入器        accelerate_interpolator        加速-动画插入器        decelerate_interpolator        减速- 动画插入器    其他的属于特定的动画效果  浮点型值:        fromXScale 属性为动画起始时 X坐标上的伸缩尺寸            toXScale   属性为动画结束时 X坐标上的伸缩尺寸             view在x方向上从fromXScale 缩放到 toXScale尺寸        fromYScale 属性为动画起始时Y坐标上的伸缩尺寸            toYScale   属性为动画结束时Y坐标上的伸缩尺寸        view在Y方向上从fromYScale 缩放到 toYScale尺寸            说明:             以上四种属性值                    0.0表示收缩到没有                 1.0表示正常无伸缩                     值小于1.0表示收缩                  值大于1.0表示放大        pivotX    距离view左边缘的距离是整个view宽度的pivotX        pivotY    距离view左边缘的距离是view父控件宽度的pivotY        说明:                以上两个属性值可以是float或者是百分比数值。                 pivotX=10为距离view左边缘的距离是整个view宽度的10像素                pivotX=10% 为距离view左边缘的距离是整个view宽度的10%                pivotX=10%p 为距离view左边缘的距离是view父控件宽度的10%                pivotY 也是相同的原理    长整型值:        duration  属性为动画持续时间        说明:   时间以毫秒为单位    布尔型值:        fillAfter 属性 当设置为true ,该动画转化在动画结束后被应用

3.translate

<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android" >    <translate        android:duration="2000"        android:fromXDelta="30"        android:fromYDelta="30"        android:toXDelta="-80"        android:toYDelta="300" /> </set>
 translate 位置变化动画画效果    整型值:        fromXDelta 属性为动画起始时 X坐标上的位置            toXDelta   属性为动画结束时 X坐标上的位置        fromYDelta 属性为动画起始时 Y坐标上的位置        toYDelta   属性为动画结束时 Y坐标上的位置        注意:                 没有指定fromXType toXType fromYType toYType 时候,                 默认是以自己为相对参照物                 长整型值:        duration  属性为动画持续时间        说明:   时间以毫秒为单位

4.rotate

<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android" >    <rotate        android:duration="3000"        android:fromDegrees="0"        android:interpolator="@android:anim/accelerate_decelerate_interpolator"        android:pivotX="50%"        android:pivotY="50%"        android:toDegrees="+350" />  </set>
 rotate 旋转动画效果   属性:interpolator 指定一个动画的插入器         在我试验过程中,使用android.res.anim中的资源时候发现         有三种动画插入器:            accelerate_decelerate_interpolator   加速-减速 动画插入器            accelerate_interpolator               加速-动画插入器            decelerate_interpolator               减速- 动画插入器         其他的属于特定的动画效果   浮点数型值:        fromDegrees 属性为动画起始时物件的角度            toDegrees   属性为动画结束时物件旋转的角度 可以大于360度           说明:                 当角度为负数——表示逆时针旋转                 当角度为正数——表示顺时针旋转                               (负数from——to正数:顺时针旋转)                    (负数from——to负数:逆时针旋转)                  (正数from——to正数:顺时针旋转)                  (正数from——to负数:逆时针旋转)               pivotX    距离view左边缘的距离是整个view宽度的pivotX        pivotY    距离view左边缘的距离是view父控件宽度的pivotY        说明:         以上两个属性值可以是float或者是百分比数值。                 pivotX=10为距离view左边缘的距离是整个view宽度的10像素                pivotX=10% 为距离view左边缘的距离是整个view宽度的10%                pivotX=10%p 为距离view左边缘的距离是view父控件宽度的10%                pivotY 也是相同的原理    长整型值:        duration  属性为动画持续时间        说明:       时间以毫秒为单位

在Activity中的简单使用:

public class MainActivity extends BaseActivity {    private ImageView imageView;    private Animation animationScale;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.id.activity_main);        imageView = (ImageView) findViewById(R.id.imageview);        animationScale = AnimationUtils.loadAnimation(this, R.anim.scale);        imageView.startAnimation(animationScale);    }

}

最后:set Animation()与startAnimation()
在onCreate()中使用 image.setAnimation可以实现和startAnimation一样的效果,但是如果你想手动开始动画比如在OnClickListener中startAnimation可以正常播放动画,setAnimation无法播放。

看下api

  /**     * Sets the next animation to play for this view.     * If you want the animation to play immediately, use     * startAnimation. This method provides allows fine-grained     * control over the start time and invalidation, but you     * must make sure that 1) the animation has a start time set, and     * 2) the view will be invalidated when the animation is supposed to     * start.     *     * @param animation The next animation, or null.     */     public void setAnimation(Animation animation) {         mCurrentAnimation = animation;         if (animation != null) {             animation.reset();         }     } [java]/** * Start the specified animation now. * * @param animation the animation to start now */ public void startAnimation(Animation animation) {     animation.setStartTime(Animation.START_ON_FIRST_FRAME);     setAnimation(animation);     invalidateParentCaches();     invalidate(true); } 

发现set Animation没有执行 invalidateParentCaches(),invalidate(true) 这两个方法,也就是setAnimation方法里没有立即执行动画,setAnimation只是准备要播放的动画,它还需要别的条件来启动他(具体什么条件还在探索中。。。)