Android动画——View动画

一、概述

  View动画共有四种效果分别是平移动画、旋转动画、缩放动画以及透明度变化,此外帧动画也属于View动画,但实现效果与前面几种有所区别。

二、View动画的种类

  四种动画分别对应四个Animation的子类TranslateAnimation、RotateAnimation、ScaleAnimation、AlphaAnimation,同时也可用XML来定义动画,分别对应标签<translate> <rotate> <scale> <alpha>,在实际应用中以XML方式为主,因为这种方式结构更为清晰。

  下面简单介绍XML定义动画。在res下的anim文件夹添加动画源文件,其中最外层为set表示是一个动画集合,可以在其内部定义多种动画效果。set的常用属性有:

      1、interpolator 插值器,影响动画的速度,即在播放动画时速度的变化,如最初慢逐渐加速或最初快逐渐减速等效果。

        在Animations框架当中定义了一下几种Interpolator

        1.AccelerateDecelerateInterpolator:在动画开始与结束的地方速率改变比较慢,在中间的时候速率快。

        2.AccelerateInterpolator:在动画开始的地方速率改变比较慢,然后开始加速
        3.CycleInterpolator:动画循环播放特定的次数,速率改变沿着正弦曲线

        4.DecelerateInterpolator:在动画开始的地方速率改变比较慢,然后开始减速
        5.LinearInterpolator:动画以均匀的速率改变

      2、shareInterpolator 是否共享插值器,即动画集合内的动画是否共享set定义的插值器。

      3、zAdjustment 设置的动画运行时在Z轴的位置(top/bottom/normal)

      4、fillAfter 动画结束后是否保留动画效果

      5、fillBefore 动画结束后是否还原初始状态

  四种动画的常用属性则有

      1、translate   平移动画

        1、fromXDelta、toXDelta 设置X坐标的初始值以及结束值

        2、fromYDelta、toYDelta 同理

      2、scale 缩放动画

        1、fromXScale toXScale 水平方向缩放始末值

        2、fromYScale toYScale 同理

        3、pivotX pivotY 缩放轴点坐标

      3、rotate 旋转动画

        1、fromDegrees toDegrees 旋转角度始末值

        2、pivotX、pivotY 旋转的轴点坐标

        轴点默认值为左上角。

      4、alpha 透明度动画

        1、fromAlpha toAlpha 透明度始末值

  上述四种动画及set共同的常用属性还有:duration 动画持续时间 以及fillAfter和fillBefore。动画本身也可以指定自己的插值器。

  

  使用动画非常简单,在定义XML文件后,用以下代码即可为View加载动画

 Animation animation = AnimationUtils.loadAnimation(this,R.anim.animation_test);
        testImage.startAnimation(animation);

  其中startAnimation表示立即执行动画,相对应的还有setAnimation,它表示告知View将要执行的动画,可以设定什么时候执行。

  除了XML的方式外,还可以通过代码实现动画,同样很简单。

 AlphaAnimation alphaAnimation = new AlphaAnimation(0,1);
          alphaAnimation.setDuration(3000);
          testImage.startAnimation(alphaAnimation);

以上为透明度动画,其他动画效果方法类似。

 

 除了上述的使用之外还可为动画设置监听,代码如下

        animation.setAnimationListener(new Animation.AnimationListener() {
            @Override
            public void onAnimationStart(Animation animation) {

            }

            @Override
            public void onAnimationEnd(Animation animation) {

                }

            @Override
            public void onAnimationRepeat(Animation animation) {

            }
        });

三个监听方法分别对应三种状态。

三、自定义View动画

   自定义View动画主要通过继承Animation抽象类,复写initialize和applyTransformation方法,其中initialize方法执行初始化工作,applyTransformation方法则进行相应的矩阵变化。在实际开发中很少用到自定义View动画。

四、帧动画

   帧动画实现类似幻灯片播放的效果,播放预设的一组图片。使用的类为AnimationDrawable,对应的标签为animation-list,子标签item通过drawable指定播放的图片,duration指定图片显示时间。

    

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="false">
    <item android:drawable="@drawable/ic_add" android:duration="1000" />
    <item android:drawable="@drawable/ic_manage" android:duration="1000" />
    <item android:drawable="@drawable/ic_setting" android:duration="1000" />
    <item android:drawable="@drawable/ic_switch" android:duration="1000" />

</animation-list>

   将上述的Drawable作为View的背景并通过Drawable的start方法播放,默认为循环播放。帧动画已造成OOM(内存溢出),应避免使用过多大尺寸图片。

      TextView textView = (TextView) findViewById(R.id.frame_animation);
                AnimationDrawable drawable = (AnimationDrawable) textView.getBackground();
                drawable.start();

五、View动画的特殊使用场景

  1、LayoutAnimation

    作用于ViewGroup,为ViewGroup中每个子元素的出场添加动画效果。

    使用步骤主要有:

      1、定义对应的XML文件,如下

<?xml version="1.0" encoding="utf-8"?>
<layoutAnimation xmlns:android="http://schemas.android.com/apk/res/android"
    android:delay="0.5"
    android:animationOrder="normal"
    android:animation="@anim/animation_item" />

       delay为动画延迟时间,animationOrder指定动画播放顺序(normal/random/reverse),animation指定具体的动画。

      2、定义具体的动画效果

      3、为ViewGroup指定LayoutAnimation,通过layoutAnimation属性。

    除了上述方法还可以通过代码来实现,主要通过LayoutAnimationController。

   LayoutAnimationController controller = new LayoutAnimationController(animation);
        controller.setOrder(LayoutAnimationController.ORDER_NORMAL);
        listview.setLayoutAnimation(controller);

  2、Activity的切换效果

    主要通过overridePendingTransition(int enterAnim,int exitAnim)方法实现。

    其中,enterAnim指Activity被打开时的动画资源id,exitAnim指Activity被暂停时的动画资源id。

    只要在startActivity或者复写finish方法时调用该方法即可实现自定义的切换效果,注意该方法必须放在前述方法的后面。

    类似的,对于碎片(Fragment)也可添加切换动画,为了兼容性,使用support-v4兼容包,通过FragmentTransaction的setCustomAnimations()来添加切换动画。

      

时间: 2024-10-12 00:55:32

Android动画——View动画的相关文章

Android移动view动画问题--停在动画的最后一帧(转)

Android写动画效果不是一般的麻烦,网上找了好久,终于解决了动画的问题,总结记录以共勉. 仅以水平方向移动效果做说明,垂直方向类似. public void slideview(final float p1, final float p2) { TranslateAnimation animation = new TranslateAnimation(p1, p2, 0, 0); animation.setInterpolator(new OvershootInterpolator());

Android传统View动画与Property动画基础及比较

前言:关于动画方面的知识也整理一段时间了,如题,这篇文章简单的介绍了View和Property动画的概念,如何在项目中创建资源文件,以及如何在代码中使用它们,本次整理动画的重点放在了Property动画上,下一篇文章将详细的分析Property动画几个重要的类,并分析几个开源库的实现,敬请期待. View anim (Tween/Frame) Tween动画 主要有4中:缩放.平移.渐变.旋转 文件位置: res/anim/filename.xml编译资源的数据类型:an Animation.资

Android移动view动画问题

http://www.cnblogs.com/eoiioe/archive/2012/08/29/2662546.html Android写动画效果不是一般的麻烦,网上找了好久,终于解决了动画的问题,总结记录以共勉. 仅以水平方向移动效果做说明,垂直方向类似. public void slideview(final float p1, final float p2) { TranslateAnimation animation = new TranslateAnimation(p1, p2, 0

Android(java)学习笔记200:Android中View动画之 XML实现 和 代码实现

1.Animation 动画类型 Android的animation由四种类型组成: XML中: alph 渐变透明度动画效果 scale 渐变尺寸伸缩动画效果 translate 画面转换位置移动动画效果 rotate 画面转移旋转动画效果 JavaCode中 AlphaAnimation 渐变透明度动画效果 ScaleAnimation 渐变尺寸伸缩动画效果 TranslateAnimation 画面转换位置移动动画效果 RotateAnimation 画面转移旋转动画效果  2.Andro

Android中view动画

[1]透明 //点击按钮 实现iv 透明的效果 动画 public void click1(View v) { //1.0意味着着完全不透明 0.0意味着完全透明 AlphaAnimation aa = new AlphaAnimation(1.0f, 0.0f); aa.setDuration(2000); //设置动画执行的时间 aa.setRepeatCount(1); //设置重复的次数 aa.setRepeatMode(Animation.REVERSE);//设置动画执行的模式 //

怎样使android的view动画循环弹动

在res中建立文件夹anim,分别写下cycles.xml,shake1.xml,shake2.xml cycles.xml: 1 <?xml version="1.0" encoding="utf-8"?> 2 <!-- android:cycles代表移动的速度 --> 3 <cycleInterpolator xmlns:android="http://schemas.android.com/apk/res/androi

Android View动画

Animation TypeEvaluator View的animate方法 ValueAnimator ObjectAnimator AnimatorSet 使用xml来创建动画 animation objectAnimator set Animator set 自己定义ObjectAnimator属性 propertyValuesHolder Keyframe Interpolator 贝塞尔曲线 PathInterpolator 加减速引子 Android的动画模式:tween anima

【Android自定义View实战】之仿百度加载动画,一种优雅的Loading方式

转载请注明出处:http://blog.csdn.net/linglongxin24/article/details/53470872 本文出自[DylanAndroid的博客] Android自定义View实战之仿百度加载动画一种优雅的Loading方式 第一个仿百度加载动画用ObjectAnimator属性动画操作ImageView的属性方法实现 第二个仿百度加载动画第二种实现方式用ValueAnimator原生的ondraw方法实现 第三个扔球动画-水平旋转动画 第四个扔球动画-垂直旋转动

android自定义View之(四)------一键清除动画

1.前言: 自己也是参考别人的一些自定义view例子,学习了一些基本的自定义view的方法.今天,我参考了一些资料,再结合自已的一些理解,做了一个一键清除的动画.当年,我实现这个是用了几张图片,采用Frame anination的方式来实现,但是这个方法,不灵活,并且占资源,下面,我就采用自定义view的方法来实现这个功能. 2.效果图: 3.具体详细代码 3.1 \res\values\attrs_on_key_clear_circle_view.xml <resources> <de