Android动画集与自定义动画
2016-05-19 15:22
197 查看
Android系统自定义的动画效果有
1. AlphaAnimation 透明度动画
2. RotateAnimation 旋转动画
3. TranslateAnimation 移位动画
4. ScaleAnimation 缩放动画
5. AnimationSet 动画效果集合
前四种动画的使用方法大同小异,第五种是将前四种动画任意组合而成的动画集合,也较为简单。这里我来记录下各种动画的使用方法并实现自定义动画。
首先新建个工程,修改默认布局,增添六个按钮
在MainActivity中声明并引用各个Button对象
一、AlphaAnimation 的使用方法最为简单,构造函数的两个参数意味着透明度从零(完全透明)到一(完全不透明)。setDuration(long)设置动画的持续时间,以毫秒为单位。
此外,可以通过以下函数设置保持动画最终效果不变,即如果透明度是从一变为零,那动画结束后就可以保持透明度始终为零。
二、RotateAnimation 有多个构造函数
以下四个参数的构造函数意为从角度0转到360度,以相对组件左上角X轴偏右六百个像素,Y轴偏零个像素为中心点旋转。
常用的为以下构造函数,Animation.RELATIVE_TO _SELF意为旋转中心类型,意思是相对组件自身,偏移量0.5f,意为50%,在这里即表示让组件以自身中心点为中心轴旋转。
旋转中心类型还有相对父级容器(Animation.RELATIVE_TO_PARENT),偏移量以百分比表示、绝对指定类型(Animation.ABSOLUTE),偏移量以绝对偏移量表示。
三、TranslateAnimation的使用方法与RotateAnimation 类似,重点是指定相对哪个组件来移动
四、ScaleAnimation
下列函数意为让组件X轴从一缩小到零,Y轴从一放大到二,缩放中心为相对自身的中心点
五、 AnimationSet意为动画的集合,可以向之添加多个动画,然后一起赋给某个组件。
以上函数向animationSet 添加了透明度动画和旋转动画,可以看到按钮在旋转的同时透明度也在变化
六、以上动画类都是继承于父类Animation,因此我们想要自定义动画,一般也是继承于Animation类。
自定义动画效果如下,按钮呈现“摇头”动作,因为转为了gif动态图,动作看起来不是多流畅,实际上是不会的。
新建一个类继承于Animation,命名为CustomAnimation
Animation类含有一个applyTransformation方法,会在动画执行过程中不断执行该函数。参数interpolatedTime会在该过程中不断自增,从零增大到一,Transformation 表示组件对象,自定义的动画效果就是实施到该对象上。
我们只要重写applyTransformation函数,就可以实现按钮的“摇头”效果了。
摇头效果是通过setTranslate()函数让组件移动的,X轴变化而Y轴不变。
通过Math.sin()函数让dis呈现周期性变化,这样就可以让按钮来回移动了。
七、为动画添加事件监听
分别在动画开始和结束时弹出一个Toast
代码可以点这里下载:Android动画集与自定义动画
1. AlphaAnimation 透明度动画
2. RotateAnimation 旋转动画
3. TranslateAnimation 移位动画
4. ScaleAnimation 缩放动画
5. AnimationSet 动画效果集合
前四种动画的使用方法大同小异,第五种是将前四种动画任意组合而成的动画集合,也较为简单。这里我来记录下各种动画的使用方法并实现自定义动画。
首先新建个工程,修改默认布局,增添六个按钮
<?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:orientation="vertical" tools:context="com.example.zy.myapplication.MainActivity"> <Button android:id="@+id/btnAlpha" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="透明度动画" /> <Button android:id="@+id/btnRotate" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="旋转动画" /> <Button android:id="@+id/btnTranslate" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="移位动画" /> <Button android:id="@+id/btnScale" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="缩放动画" /> <Button android:id="@+id/btnAnimationSet" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="动画集合" /> <Button android:id="@+id/btnCustomAnimation" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="自定义动画" /> </LinearLayout>
在MainActivity中声明并引用各个Button对象
private Button alphaButton; private Button rotateButton; private Button translateButton; private Button scaleButton; private Button animSetButton; private Button customAnimButton;
一、AlphaAnimation 的使用方法最为简单,构造函数的两个参数意味着透明度从零(完全透明)到一(完全不透明)。setDuration(long)设置动画的持续时间,以毫秒为单位。
AlphaAnimation alpha = new AlphaAnimation(0, 1); alpha.setDuration(2000); alphaButton.startAnimation(alpha);
此外,可以通过以下函数设置保持动画最终效果不变,即如果透明度是从一变为零,那动画结束后就可以保持透明度始终为零。
alpha.setFillAfter(true);
二、RotateAnimation 有多个构造函数
以下四个参数的构造函数意为从角度0转到360度,以相对组件左上角X轴偏右六百个像素,Y轴偏零个像素为中心点旋转。
RotateAnimation rotate=new RotateAnimation(0,360,600,0);
常用的为以下构造函数,Animation.RELATIVE_TO _SELF意为旋转中心类型,意思是相对组件自身,偏移量0.5f,意为50%,在这里即表示让组件以自身中心点为中心轴旋转。
RotateAnimation rotate = new RotateAnimation(0, 360, Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF, 0.5f); rotate.setDuration(1000); rotateButton.startAnimation(rotate);
旋转中心类型还有相对父级容器(Animation.RELATIVE_TO_PARENT),偏移量以百分比表示、绝对指定类型(Animation.ABSOLUTE),偏移量以绝对偏移量表示。
三、TranslateAnimation的使用方法与RotateAnimation 类似,重点是指定相对哪个组件来移动
TranslateAnimation translate = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0, Animation.RELATIVE_TO_SELF, 0.5f); translate.setDuration(1000); translateButton.startAnimation(translate);
四、ScaleAnimation
下列函数意为让组件X轴从一缩小到零,Y轴从一放大到二,缩放中心为相对自身的中心点
ScaleAnimation scale = new ScaleAnimation(1, 0, 1, 2, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); scale.setDuration(1000); scaleButton.startAnimation(scale);
五、 AnimationSet意为动画的集合,可以向之添加多个动画,然后一起赋给某个组件。
AnimationSet animationSet = new AnimationSet(true); animationSet.setDuration(2000); AlphaAnimation another_alpha = new AlphaAnimation(0, 1); RotateAnimation another_rotate = new RotateAnimation(0, 360, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); animationSet.addAnimation(another_alpha); animationSet.addAnimation(another_rotate); animSetButton.startAnimation(animationSet);
以上函数向animationSet 添加了透明度动画和旋转动画,可以看到按钮在旋转的同时透明度也在变化
六、以上动画类都是继承于父类Animation,因此我们想要自定义动画,一般也是继承于Animation类。
自定义动画效果如下,按钮呈现“摇头”动作,因为转为了gif动态图,动作看起来不是多流畅,实际上是不会的。
新建一个类继承于Animation,命名为CustomAnimation
Animation类含有一个applyTransformation方法,会在动画执行过程中不断执行该函数。参数interpolatedTime会在该过程中不断自增,从零增大到一,Transformation 表示组件对象,自定义的动画效果就是实施到该对象上。
protected void applyTransformation(float interpolatedTime, Transformation t) { }
我们只要重写applyTransformation函数,就可以实现按钮的“摇头”效果了。
package com.example.zy.myapplication; import android.view.animation.Animation; import android.view.animation.Transformation; /** * Created by ZY on 2016/5/18. */ public class CustomAnimation extends Animation { //偏移距离 private float mDistance; //移动速度 private float mVelocity; public CustomAnimation(float distance, float velocity) { this.mDistance = distance; this.mVelocity = velocity; } protected void applyTransformation(float interpolatedTime, Transformation t) { float dis= (float) (Math.sin(interpolatedTime * mVelocity) * mDistance); t.getMatrix().setTranslate(dis, 0); } }
摇头效果是通过setTranslate()函数让组件移动的,X轴变化而Y轴不变。
通过Math.sin()函数让dis呈现周期性变化,这样就可以让按钮来回移动了。
CustomAnimation customAnimation = new CustomAnimation(30,40); customAnimation.setDuration(1000); customAnimButton.startAnimation(customAnimation);
七、为动画添加事件监听
分别在动画开始和结束时弹出一个Toast
customAnimation.setAnimationListener(new Animation.AnimationListener() { @Override public void onAnimationStart(Animation animation) { Toast.makeText(MainActivity.this, "动画开始", Toast.LENGTH_SHORT).show(); } @Override public void onAnimationEnd(Animation animation) { Toast.makeText(MainActivity.this, "动画结束", Toast.LENGTH_SHORT).show(); } @Override public void onAnimationRepeat(Animation animation) { } });
代码可以点这里下载:Android动画集与自定义动画
相关文章推荐
- android design library提供的TabLayout的用法
- Android平台Overlay机制
- android:descendantFocusability
- 深入浅出RxJava四-在Android中使用响应式编程
- AndroidManifest合并原理
- Android开发实践 巧用Activity和Fragment
- Android贝塞尔动画实现QQ,虎牙等平台点赞效果初探
- 使用Netty进行Android与Server端通信实现文字发送接收与图片上传
- Android NDK隐藏jni动态库的内部符号表
- Android FlexboxLayout 简单介绍
- Android stutio 编译写程序时,不自动提示错误报红
- Android中的PopupWindow详解
- Android4.4-Launcher源码分析系列之概述
- FlycooLabelView显示角标效果
- Android开发Message源码分析【享元模式|对象池】
- Android上改变listView的选中颜色
- Android Drawable Resources系列4:<selector>
- Android开发常见实用API(二)
- 如何玩转Android矢量图VectorDrawable
- Android ViewPager使用详解