Android学习之Animation(一)
3.0以前,android支持两种动画模式,Tween Animation,Frame Animation,在android3.0中又引入了一个新的动画系统:Property Animation,这三种动画模式在SDK中被称为Property Animation,View Animation,Drawable Animation。
我今天要说的就是Tween Animation.要实现它有两种方式。
- 通过代码控制
- 通过xml文件进行控制(推荐)
代码控制
大致的步骤是这样的:
- 先定义一个AnimationSet,用来“盛装”我们的Animation。
- 然后是创建相应的Animation(android中可以创建的Animation有四种,分别是AlphaAnimation,ScaleAnimation,TransAnimation以及RotateAnimation)。
- 然后根据帮助文档进行参数的设置就可以了
- 最后将设置好的Animation添加到AnimationSet中,就可以应用了。
下面是一个简单的代码:
package com.summer.animationutils;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.view.animation.AnimationSet;
import android.view.animation.RotateAnimation;
import android.view.animation.ScaleAnimation;
import android.view.animation.TranslateAnimation;
import android.widget.Button;
import android.widget.ImageView;
public class MainActivity extends Activity {
private Button button_rotate,button_alpha,button_translate,button_scale;
private ImageView imageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageView=(ImageView) findViewById(R.id.imageview1);
button_rotate=(Button) findViewById(R.id.button_rotate);
button_alpha=(Button) findViewById(R.id.button_alpha);
button_translate=(Button) findViewById(R.id.button_translate);
button_scale=(Button) findViewById(R.id.button_scale);
button_rotate.setOnClickListener(new RotateAnimationListener());
button_alpha.setOnClickListener(new AlphaAnimationListener());
button_translate.setOnClickListener(new TranslateAnimationListener());
button_scale.setOnClickListener(new ScaleAnimationListener());
}
class RotateAnimationListener implements OnClickListener{
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
AnimationSet animationSet=new AnimationSet(true);
RotateAnimation rotateAnimation=new RotateAnimation(0, 360,
Animation.RELATIVE_TO_SELF, 0.5f,
Animation.RELATIVE_TO_SELF, 0.5f);
rotateAnimation.setDuration(1500);
animationSet.addAnimation(rotateAnimation);
imageView.startAnimation(animationSet);
}
}
class AlphaAnimationListener implements OnClickListener{
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
AnimationSet animationSet=new AnimationSet(true);
AlphaAnimation alphaAnimation=new AlphaAnimation(1,0);
alphaAnimation.setDuration(1500);
animationSet.addAnimation(alphaAnimation);
imageView.startAnimation(animationSet);
}
}
class TranslateAnimationListener implements OnClickListener{
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
AnimationSet animationSet=new AnimationSet(true);
TranslateAnimation translateAnimation=new TranslateAnimation(
Animation.RELATIVE_TO_SELF,0f,
Animation.RELATIVE_TO_SELF,0.5f,
Animation.RELATIVE_TO_SELF,0f,
Animation.RELATIVE_TO_SELF,1.0f);
translateAnimation.setDuration(1500);
animationSet.addAnimation(translateAnimation);
imageView.startAnimation(animationSet);
}
}
class ScaleAnimationListener implements OnClickListener{
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
AnimationSet animationSet=new AnimationSet(true);
ScaleAnimation scaleAnimation=new ScaleAnimation(1,0.1f,1,0.1f,
Animation.RELATIVE_TO_SELF, 0.5f,
Animation.RELATIVE_TO_SELF, 0.5f);
scaleAnimation.setDuration(1500);
animationSet.addAnimation(scaleAnimation);
imageView.startAnimation(animationSet);
}
}
}
小总结:
- 代码比较简单,就不再一一的进行说明了。
- 在AnimationSet中可以添加多个Animtion,实现不同的动画效果的叠加。
- 对于AnimationSet的属性的设置可以全部映射到其内部的所有的动画中。
通过XML文件控制
大致的步骤如下:
- 在res目录下创建一个anim的文件夹(名称不必拘泥于这一个)
- 在anim文件夹下创建一个xml文件(以set标签内嵌套alpha,rotate,scale,translate等子标签的方式设置动画效果)
- 然后在使用到动画效果的地方用相关代码进行添加即可。(稍后详述)
下面是我的一个动画文件示例分解:
如alpha.xml。简单明了清晰
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<alpha
android:fromAlpha="0.1"
android:toAlpha="1.0"
android:startOffset="500"
android:duration="1500"
/>
</set>
再看rotate.xml文件,其中pivotX属性的值分别代表着三种不同的情况(当然其他的属性值也是有这个情况滴)
- android:pivotX=”60”;//绝对位置定位
- android:pivotX=”60%”;//相对于控件自身的比例定位
- android:pivotX=”60%p”;//相对于父控件的比例定位
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<rotate
android:fromDegrees="0"
android:toDegrees="360"
android:pivotX="50%"
android:pivotY="50%"
android:duration="1500"
/>
</set>
再看translate.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:fromXDelta="50%"
android:fromYDelta="0%"
android:toXDelta="0%"
android:toYDelta="100"
android:duration="1500"
/>
</set>
最后是scale.xml.
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<scale
android:fromXScale="1.0"
android:fromYScale="1.0"
android:toXScale="0.0"
android:toYScale="0.0"
android:pivotX="50%"
android:pivotY="50%"
android:duration="2000"
/>
</set>
完成了xml动画文件的设置,下一步当然是要进行使用了,否则要它做什么,我们可以使用下慢的代码来进行动画的使用。
Animation animation=(Animation) AnimationUtils.loadAnimation(MainActivity.this, R.anim.scale);
imageView.startAnimation(animation);
同样的,其他的动画也可以这么做。
偷偷的告诉你,可以在一个xml文件中同时设置好几个子标签,来完成好几个动画的叠加效果哦。(即如果想要共享一个Interpolator的话,需要将android:shareInterpolator的值设置为true)。至于什么是Interpalotor,就是android自带的一些动画的效果在这个安装目录下可以看到。
Android学习之Animation(一)的更多相关文章
- Android学习之Animation(三)
今天观看了一个关于android动画的一些知识,就顺便记录下来,以备之后的学习和参考. 在XML文件中使用LayoutAnimationController 第一步: 在res/anim文件夹下创建一 ...
- Android学习之Animation(二)
接着上次的View Animation动画,这次是Frame Animation.具体点来讲就是在Frame层面上进行变化的动画效果的设置.说白了就是定时更换"背景"图.来实现不同 ...
- android学习之-Theme和Style
android学习之-Theme和Style 分类: android 2013-10-11 15:01 960人阅读 评论(0) 收藏 举报 android style和theme的使用. style ...
- 《Android学习指南》目录
源:<Android学习指南>目录 Android学习指南的内容分类: 分类 描述 0.学习Android必备的Java基础知识 没有Java基础的朋友,请不要先看Android的课程,这 ...
- Android 动画——Frame Animation与Tween Animation
很多手机应用的引导页都是动画的,添加动画后的应用画面会更加生动灵活,今天博主也学习了Android中Animation的使用,下面来总结下. android中的Animation分为两种,一种是Fr ...
- 《Android学习指南》文件夹
转自:http://android.yaohuiji.com/about Android学习指南的内容分类: 分类 描写叙述 0.学习Android必备的Java基础知识 没有Java基础的朋友,请不 ...
- 【Android】完善Android学习(四:API 3.1)
备注:之前Android入门学习的书籍使用的是杨丰盛的<Android应用开发揭秘>,这本书是基于Android 2.2API的,目前Android已经到4.4了,更新了很多的API,也增 ...
- 【Android】完善Android学习(三:API 3.0)
备注:之前Android入门学习的书籍使用的是杨丰盛的<Android应用开发揭秘>,这本书是基于Android 2.2API的,目前Android已经到4.4了,更新了很多的API,也增 ...
- Android学习笔记之滑动翻页(屏幕切换)
如何实现手机上手动滑动翻页效果呢?呵呵,在这里我们就给你们介绍一下吧. 一般实现这个特效会用到一个控件:ViewFlipper <1>View切换的控件—ViewFlipper 这个控件是 ...
随机推荐
- git修改远程仓库地址
方法有三种: 1.修改命令 git remote set-url origin [url] 例如: git remote set-url origin gitlab@gitlab.chumob.com ...
- 解决IE6下select显示在弹出框上问题
利用定位position:absolute;z-index:1;和iframe[z-index:-1]来解决此问题,最好根据需要加上: border='0' frameborder='0' scrol ...
- Microsoft Visual Studio 2017 编译最新版 libuv 1.x 并且生成 LIB 和 DLL 两种模式
以为昨天晚上编译通过就可以了,哪知道,早上编译DLL的一车的报错 今天开始逐个解决,终于把引用的问题一亿解决了,具体步骤如下 1 在 Windows 平台下编译出错,显示导出未定义,打开 uv-win ...
- Spring统一返回Json工具类,带分页信息
前言: 项目做前后端分离时,我们会经常提供Json数据给前端,如果有一个统一的Json格式返回工具类,那么将大大提高开发效率和减低沟通成本. 此Json响应工具类,支持带分页信息,支持泛型,支持Htt ...
- 分别用face++和百度获取人脸属性(python单机版)
称之为单机版,主要是相对于调用摄像头实时识别而言.本篇主要py2下利用face++和百度接口获取本地图片中的人脸属性,并按照一定格式保存数据. face++版 face++是刚注册的,只能用一个试用的 ...
- Programming In Scala笔记-第八章、函数与闭包
当程序的代码量增大时,就需要对各功能模块进行分割,这些分割的小模块就是本文中接下来会进行分析的函数.接下来的部分会讲解包括函数嵌套,函数字面量,以及函数值等概念. 一.方法 一会函数一会方法的,是不是 ...
- ROS(indigo) turtlebot2 + android一些有趣应用
ROS和Android配合使用非常有趣,这里推荐,ROSClinet,使用rosbridge让android和ROS通信: 具体参考奥斯卡的个人剧场:http://xxhong.net/ turtle ...
- Leetcode解题-链表(2.2.1)AddTwoNumbers
1 题目:2.2.1 Add Two Numbers You are given two linked lists representing two non-negative numbers. The ...
- BI Publisher(rtf)模板开发语法大全
Rtf模板开发例如背景,纹理分栏等等功能都能用word工具实现不再具体总结大家可以参考word教程..... 一.组 定义一个组的目的是告诉XMLPublisher对重复的数据行进行循环显示,也就 ...
- 用户创建,删除and并发注册and系统登陆的API研究(学习汇总网上资料)
一.系统登陆链接实现 比如有一个外围支持系统,用户需要在外围系统登录之后点个link就可以登录到Oracle ERP系统中,那么我们需要先把外围系统的用户创建在Oracle ERP中,并且分配职责给他 ...