Android三种动画之 补间动画笔记

Android系统中的动画主要可分为三类

1.帧动画 (传送门

2.补间动画(传送门

3.属性动画(传送门

注:下图来源其他博主,仅此一张

补间动画:

Tween(补间)动画 ,可以在一个视图容器内执行一系列简单变换(平移、大小、旋转、透明度)。

   通过确定开始的视图样式 和 结束的视图样式   中间动画变化过程由系统补全确定的一个动画

普通的应用场景:

   视图View的一些标准动画效果,您可以平移、旋转、缩放、透明度来设置这个视图View

特殊的应用场景:

   Activity 的切换效果
   Fragement 的切换效果
   视图组(ViewGroup)中子元素的出场效果

XML定义和Java代码的各自优点:

   补间动画通过XML或Android代码定义,使用XML文件定义,因为它更具可读性、可重用性。

   java代码中的有点是 动画效果可动态创建

 

1.View动画的种类

view动画的变换效果对应着Animation的四个子类,分别是

   TranslateAnimation, 平移动画

   ScaleAnimation,缩放动画

   RotateAnimation,旋转动画

   AlphaAnimation,透明度动画

 

新建 res/anim/xxxxx_animation.xml

具体的每个属性的作用就不一一列举了,自行百度了解。

从上面的XML可以看出,view的动画既可以是单一的动画,也可以组合在一起,而set就是组合动画的标签。

如何使用呢?

   Button mButton = (Button) findViewById(R.id.Button);       

   //创建 动画对象 并传入 动画效果xml文件
   Animation groupAnimation = AnimationUtils.loadAnimation(this, R.anim.xxxxx_animation);

   //执行动画
   mButton.startAnimation(groupAnimation );

如何监听动画?

  Animation类通过监听动画开始 / 结束 / 重复时刻来进行一系列操作,如跳转页面等等

      通过在 Java 代码里setAnimationListener()方法设置

1.Activity退出动画  自行定义样式 

2.Fragment 的切换动画 自行定义样式 

切换动画的效果不不上图了

3.在ViewGroup中可以控制子元素的出场效果,这样当他的子元素出场时都会具有这种动画效果。这种效果常常用于列表上,他的每一个item会有动画出现。它使用的就是LayoutAnimation. LayoutAnimation也是View动画。 

具体效果看文章末尾

  步骤1 . res/anim/view_animation.xml

<?xml version="1.0" encoding="utf-8"?>
// 此处采用了组合动画
<set xmlns:android="http://schemas.android.com/apk/res/android" >
    android:duration="3000"

    <alpha
        android:duration="1500"
        android:fromAlpha="1.0"
        android:toAlpha="0.0" />

    <translate
        android:fromXDelta="500"
        android:toXDelta="0"
         />

</set>

步骤2:设置 视图组(ViewGroup)的动画文件

     res/ anim /anim_layout.xml

<?xml version="1.0" encoding="utf-8"?>
// 采用LayoutAnimation标签
<layoutAnimation xmlns:android="http://schemas.android.com/apk/res/android"
    
    // 子元素开始动画的时间延迟
    // 如子元素入场动画的时间总长设置为300ms
    // 那么 delay = "0.5" 表示每个子元素都会延迟150ms才会播放动画效果
    // 第一个子元素延迟150ms播放入场效果;第二个延迟300ms,以此类推
    
     android:delay="0.5"

    // 表示子元素动画的顺序
    // 可设置属性为:
    // 1. normal :顺序显示,即排在前面的子元素先播放入场动画
    // 2. reverse:倒序显示,即排在后面的子元素先播放入场动画
    // 3. random:随机播放入场动画


    android:animationOrder="normal"


    // 设置入场的具体动画效果
    // 将步骤1的子元素出场动画设置到这里

    android:animation="@anim/view_animation"


    />

 方式1:在 XML 中指定

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#FFFFFF"
    android:orientation="vertical" >
   
     <ListView
        android:id="@+id/listView1"
        //指定layoutAnimation属性用以指定子元素的入场动画
        //这里就是前面创建的那个动画文件
        android:layoutAnimation="@anim/anim_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</LinearLayout>

方式2:在Java代码中指定

        ListView lv = (ListView) findViewById(R.id.listView1);
       
         // 加载子元素的出场动画
        Animation animation = AnimationUtils.loadAnimation(this,R.anim.anim_item);


        LayoutAnimationController controller = new LayoutAnimationController(animation);
        //延时出现
        
        controller.setDelay(0.5f);
     
         // 设置LayoutAnimation的属性
        controller.setOrder(LayoutAnimationController.ORDER_NORMAL);
    
          // 为ListView设置LayoutAnimation的属性
         lv.setLayoutAnimation(controller);
    

上述二者的效果是一样的。

图片来源于网络:

猜你喜欢

转载自blog.csdn.net/qq_34927117/article/details/81476783