今天观看了一个关于android动画的一些知识,就顺便记录下来,以备之后的学习和参考。


在XML文件中使用LayoutAnimationController


第一步:

在res/anim文件夹下创建一个xml文件,如list_layout_animation.xml.代码的内容如下面的简单的示例:

<layoutAnimation
    xmlns:android="http://schemas.android.com/res/apk/android"
    android:delay="0.5"
    android:animationOrder="random"
    android:animation="@anim/alpha"
    />

其中animation属性对应的值就是添加的动画资源文件。


第二步:

在ListView的xml声明文件中的layoutAnimation属性上进行设置即可完成添加动画的这一效果。

<ListView
        android:id="@+id/listview"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layoutAnimation="@anim/list_layout_animation"
        />

这就是通过xml文件控制的方式来实现的效果!

在代码中进行控制


第一步:

创建一个Animation对象:既可以通过xml文件装载,也可以直接使用Animation的构造函数创建Animation。


第二步:

使用如下代码创建LayoutAnimationController对象LayoutAnimationController lac=new LayoutAnimationController(animation);


第三步:

设置空间的显示的顺序:

lac.setOrder(LayoutAnimationCOntroller.ORDER_NORMAL);

第四步:

为ListView设置LayoutAnimationController属性,listView.setLayoutAnimation(Lac);


这样便也可以完成用代码的方式对动画的设置。


AnimationListener的学习


首先,顾名思义它是一个监听器,而且是一个监听动画的执行效果的和执行时间的监听器(在不同的时段会得到不同的系统的通知,从而调用相关的方法完成一些逻辑的操作!)。主要有如下几个方法

  • onAnimationStart(Animation animation)
  • onAnimationRepeat(Animation animation)
  • onAnimationEnd(Animation animation)

下面是一个简单的例子,代码的思路很清晰,就不在做注释了。

package com.sumer.animationutils;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.view.animation.Animation.AnimationListener;
import android.widget.Button;
import android.widget.ImageView;

public class MainActivity extends Activity {

    private Button removeButton=null;
    private Button addButton=null;
    private ImageView mImageView=null;
    private ViewGroup mViewGroup=null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        removeButton=(Button) findViewById(R.id.removeButtonId);
        removeButton.setOnClickListener(new RemoveButtonListener());
        addButton=(Button) findViewById(R.id.addButtonId);
        addButton.setOnClickListener(new AddButtonListener());

        mViewGroup=(ViewGroup) findViewById(R.id.layoutId);
        mImageView=(ImageView) findViewById(R.id.imageViewId);
    }

    private class AddButtonListener implements OnClickListener{

        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            AlphaAnimation animation=new AlphaAnimation(0.0f,1.0f);
            animation.setDuration(1500);
            animation.setStartOffset(500);
            ImageView imageViewAdd=new ImageView(MainActivity.this);
            imageViewAdd.setImageResource(R.drawable.ic_launcher);
            mViewGroup.addView(imageViewAdd, new LayoutParams(
                    LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));
            imageViewAdd.startAnimation(animation);
        }
    }
    private class RemoveButtonListener implements OnClickListener{

        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            AlphaAnimation animation=new AlphaAnimation(1.0f,0.0f);
            animation.setDuration(1500);
            animation.setStartOffset(500);
            animation.setAnimationListener(new RemoveAnimationListener());
            mImageView.startAnimation(animation);
        }

    }

    private class RemoveAnimationListener implements AnimationListener{

        @Override
        public void onAnimationEnd(Animation arg0) {
            // TODO Auto-generated method stub
            System.out.println("END!!!!!!!!!!!!!!!!!!!");
            mViewGroup.removeView(mImageView);
        }

        @Override
        public void onAnimationRepeat(Animation arg0) {
            // TODO Auto-generated method stub
            System.out.println("REPEAT!!!!!!!!!!!!!!!!");
        }

        @Override
        public void onAnimationStart(Animation arg0) {
            // TODO Auto-generated method stub
            System.out.println("START!!!!!!!!!!!!!!!!!");
        }

    }

}

下面是布局界面(注意是RelativeLayout)

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/layoutId"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"  >

    <Button
        android:id="@+id/addButtonId"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:text="Add Picture!"
        />
    <Button
        android:id="@+id/removeButtonId"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_above="@+id/addButtonId"
        android:text="Remove Picture!"
        />
    <ImageView
        android:id="@+id/imageViewId"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:layout_marginTop="100dip"
        android:src="@drawable/ic_launcher"
        />

</RelativeLayout>

总结:

对于Android的Animation的操作,是一个很有意思的小知识点。其中需要注意的是怎样将这些效果组合起来,形成一个优雅的界面,并能给用户更加舒服的用户体验。这才是我们最需要,也是最值得掌握的地方!

Android学习之Animation(三)的更多相关文章

  1. 【转】 Pro Android学习笔记(三二):Menu(3):Context菜单

    目录(?)[-] 什么是Context menu 注册View带有Context menu 填Context菜单内容 Context菜单点击触发 什么是Context menu 在桌面电脑,我们都很熟 ...

  2. 【转】Pro Android学习笔记(三十):Menu(1):了解Menu

    目录(?)[-] 创建Menu MenuItem的属性itemId MenuItem的属性groupId MenuItem的属性orderId MenuItem的属性可选属性 Menu触发 onOpt ...

  3. 【转】Pro Android学习笔记(三):了解Android资源(上)

    在Android开发中,资源包括文件或者值,它们和执行应用捆绑,无需在源代码中写死,因此我们可以改变或替换他们,而无需对应用重新编译. 了解资源构成 参考阅读Android学习笔记(三八):资源res ...

  4. Android学习记录(三)——安装SQLite

    这次学习安装SQLite. 一.SQLite简介 重要特性:零配置,即不需要复杂的配置即可使用 详细:https://www.runoob.com/sqlite/sqlite-intro.html 二 ...

  5. Android学习笔记(三) UI布局

    每一个布局都有其适合的方式,另外,这几个布局元素可以相互嵌套应用,做出美观的界面. 一.线性布局(LinearLayout) 线性布局,这个东西,从外框上可以理解为一个div,他首先是一个一个从上往下 ...

  6. Android学习笔记(三)——初探Intent

    //此系列博文是<第一行Android代码>的学习笔记,如有错漏,欢迎指正! Intent 是 Android 程序中各组件之间进行交互的一种重要方式,它不仅可以指明当前组件想要执行的动作 ...

  7. Android学习之Animation(二)

    接着上次的View Animation动画,这次是Frame Animation.具体点来讲就是在Frame层面上进行变化的动画效果的设置.说白了就是定时更换"背景"图.来实现不同 ...

  8. Android学习之Animation(一)

    3.0以前,android支持两种动画模式,Tween Animation,Frame Animation,在android3.0中又引入了一个新的动画系统:Property Animation,这三 ...

  9. Android学习笔记——Menu(三)

    知识点 今天继续昨天没有讲完的Menu的学习,主要是Popup Menu的学习. Popup Menu(弹出式菜单) 弹出式菜单是一种固定在View上的菜单模型.主要用于以下三种情况: 为特定的内容提 ...

随机推荐

  1. NModBus的使用

    前言:最近在做一个项目,需要使用ModBus RTU与PLC进行通讯,现在将使用过程记录,以便备查. 一.什么是ModBus通讯协议 Modbus协议是应用于电子控制器上的一种通用语言,此协议支持传统 ...

  2. Java instanceof 关键字是如何实现的?

    作者:RednaxelaFX链接:https://www.zhihu.com/question/21574535/answer/18998914来源:知乎著作权归作者所有.商业转载请联系作者获得授权, ...

  3. Day 1 Python简单程序

    一.高级语言和低级语言   最初的计算机程序都是用0和1的序列表示的,程序员直接使用的是机器指令,无需翻译,从纸带打孔输入即可执行得到结果.后来为了方便记忆,就将用0.1序列表示的机器指令都用符号助记 ...

  4. 前端技术之_CSS详解第一天

    前端技术之_CSS详解第一天 一html部分 略.... 二.列表 列表有3种 2.1 无序列表 无序列表,用来表示一个列表的语义,并且每个项目和每个项目之间,是不分先后的. ul就是英语unorde ...

  5. Unity使用UGUI进行VR游戏的界面开发

    原文链接:http://gad.qq.com/article/detail/7181505 本文首发腾讯GAD开发者平台,未经允许,不得转载 我不知道有多少同学是跟我一样,在开发VR游戏中,是使用的面 ...

  6. Spring Security 基础登录实例

    1 新建Java Web项目 导入Jar: 2 修改web.xml <?xml version="1.0" encoding="UTF-8"?> & ...

  7. PGM:贝叶斯网的参数估计

    http://blog.csdn.net/pipisorry/article/details/52578631 本文讨论(完备数据的)贝叶斯网的参数估计问题:贝叶斯网的MLE最大似然估计和贝叶斯估计. ...

  8. Android源码浅析(五)——关于定制系统,如何给你的Android应用系统签名

    Android源码浅析(五)--关于定制系统,如何给你的Android应用系统签名 今天来点简单的我相信很多定制系统的同学都会有一些特定功能的需求,比如 修改系统时间 静默安装 执行某shell命令 ...

  9. 初识Spring Boot框架

    前面的铺垫文章已经连着写了六篇了,主要是介绍了Spring和SpringMVC框架,小伙伴们在学习的过程中大概也发现了这两个框架需要我们手动配置的地方非常多,不过做JavaEE开发的小伙伴们肯定也听说 ...

  10. Linux 高性能服务器编程——I/O复用

    问题聚焦:     前篇提到了I/O处理单元的四种I/O模型.     本篇详细介绍实现这些I/O模型所用到的相关技术.     核心思想:I/O复用 使用情景: 客户端程序要同时处理多个socket ...