Android学习之Animation(三)

简介: 今天观看了一个关于android动画的一些知识,就顺便记录下来,以备之后的学习和参考。在XML文件中使用LayoutAnimationController第一步: 在res/anim文件夹下创建一个xml文件,如list_layout_animation.xml.代码的内容如下面的简单的示例:其中animation属性对应的值就是添加的动画资源文件。

今天观看了一个关于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的操作,是一个很有意思的小知识点。其中需要注意的是怎样将这些效果组合起来,形成一个优雅的界面,并能给用户更加舒服的用户体验。这才是我们最需要,也是最值得掌握的地方!

目录
相关文章
|
6月前
|
XML 缓存 Android开发
Android开发,使用kotlin学习多媒体功能(详细)
Android开发,使用kotlin学习多媒体功能(详细)
148 0
|
6月前
|
存储 安全 Linux
Android安全启动学习(四):device-mapper-verity (dm-verity)和哈希树
Android安全启动学习(四):device-mapper-verity (dm-verity)和哈希树
319 0
|
2月前
|
Java Maven 开发工具
第一个安卓项目 | 中国象棋demo学习
本文是作者关于其第一个安卓项目——中国象棋demo的学习记录,展示了demo的运行结果、爬坑记录以及参考资料,包括解决Android Studio和maven相关问题的方法。
第一个安卓项目 | 中国象棋demo学习
|
24天前
|
Web App开发 编解码 视频直播
视频直播技术干货(十二):从入门到放弃,快速学习Android端直播技术
本文详细介绍了Android端直播技术的全貌,涵盖了从实时音视频采集、编码、传输到解码与播放的各个环节。文章还探讨了直播中音视频同步、编解码器选择、传输协议以及直播延迟优化等关键问题。希望本文能为你提供有关Andriod端直播技术的深入理解和实践指导。
33 0
|
6月前
|
监控 Unix 应用服务中间件
Android-音视频学习系列-(八)基于-Nginx-搭建(rtmp、http)直播服务器
Android-音视频学习系列-(八)基于-Nginx-搭建(rtmp、http)直播服务器
|
2月前
|
Android开发
Android学习 —— 测试init.rc中的条件触发的处理顺序
Android学习 —— 测试init.rc中的条件触发的处理顺序
|
3月前
|
搜索推荐 Android开发
学习AOSP安卓系统源代码,需要什么样的电脑?不同配置的电脑,其编译时间有多大差距?
本文分享了不同价位电脑配置对于编译AOSP安卓系统源代码的影响,提供了从6000元到更高价位的电脑配置实例,并比较了它们的编译时间,以供学习AOSP源代码时电脑配置选择的参考。
212 0
学习AOSP安卓系统源代码,需要什么样的电脑?不同配置的电脑,其编译时间有多大差距?
|
4月前
|
Android开发 容器
android animation clipToPadding clipChildren
android animation clipToPadding clipChildren
|
6月前
|
存储 定位技术 开发工具
Android 开发前的设计,Android之内存泄漏调试学习与总结
Android 开发前的设计,Android之内存泄漏调试学习与总结
|
6月前
|
Java Android开发 Dart
50家大厂面试万字精华总结android编程基础学习
50家大厂面试万字精华总结android编程基础学习