动画系列之补间动画
来源:互联网 发布:淘宝卖家信誉帐号 编辑:程序博客网 时间:2024/04/30 04:10
Android中的动画分为三类, 即帧动画、补间动画和属性动画。帧动画使用简单,就是把一系列图片按照一定的顺序进行排列,然后顺序播放,在实际的开发中一般不使用(因为容易出现OOM)。下面介绍今天的主角。
优点:执行效率高, 使用简单。
缺点:不具备交互性(相对于属性动画)。比如通过平移把view从A点移动到B点,此时点击B点不能触发对象的点击事件, 而点击A点可以触发。
补间动画的分类 名称标签对应的Java类
效果透明度动画<alpha>AlphaAnimation改变view的透明度平移动画<translate>TranslateAnimation移动view旋转动画<rotate>RotateAnimation旋转view缩放动画<scale>ScalaAnimation放大或缩小view
1、常用属性:
android:interpolator 动画的差值器, 影响动画的速率, 可以不写 默认使用加速减速差值器
android : shareInterpolator 表示动画集合是否共用一个差值器, 如果集合没有指定,那么子组件如果需要 则需要单独指定, 如果为true 自动画的差值器没有效果
android : duration 动画的时间 默认为300ms,刷新频率为 10ms/帧
android : fillAfter 动画结束后view停留的位置, true 表示停留在结束位置,false 表示动画结束放回开始位置
各种动画的独有属性
透明度动画
android: fromAlpha view透明度的起始值
android:toAlpha view透明度的结束值
平移动画
android : fromXDelta 表示X轴的起始值
android : toXDelta 表示X轴的结束值
android : fromYDelta 表示Y轴的起始值
android:toYDleta 表示Y轴的结束值
旋转动画
android : fromDegrees 旋转开始的角度
android : toDegrees 旋转结束的角度
android : pivotX 旋转轴点X轴坐标值
android : pivotY 旋转轴点Y轴坐标值
缩放动画
android : fromXScale 水平方向旋转的起始值
android : toXScale 水平方向旋转的结束值
android : fromYScale 垂直方向旋转的起始值
android : toYScale 垂直方向旋转的结束值
android : pivotX 旋转轴点X轴的坐标值
三、补间动画的自定义
实现步骤:
1、自定义一个类 继承 Animation
2、重写 initialize() 方法 进行初始化操作
3、重写 applyTransformation() 实现自定义动画, 一般需要借助于Camera类(android.graphics.Camera)
applyTransformation方法 的两个参数
float interpolatedTime : 差值器完成的时间 取值范围 0.0 - 1.0
Transformation t : 转换器对象 可以获取一个矩(Matrix)阵对象
示例代码如下: (本段代码摘自 《Android开发艺术探索》)
android:delay 表示动画延迟的时间
android:animationOrder 表示子组件动画的顺序 normal 顺序显示 reverse 逆序显示 random 随机显示
android:animation 引用一个动画 表示子组件显示的动画
b. 在 res/anim 目录下定义需要引入的动画
使用动态代码实现的方式如下:
activity之间的切换默认是自带动画效果的, 有时为了满足产品需求 ,需要更改动画效果。具体实现如下,
调用overridePendingTransition(int enterAnim, int exitAnim) 参数分别为进入动画和退出动画的资源ID
注意: 该方法需要在startActivity() 和 finish() 之后调用动画才会生效。
一、概念介绍:
补间动画又叫视图动画,是Android最早支持的动画,是通过对某一对象不断做图片变换(平移, 旋转, 缩放, 透明度)来实现动画效果的,是一种渐变式动画,支持自定义。优点:执行效率高, 使用简单。
缺点:不具备交互性(相对于属性动画)。比如通过平移把view从A点移动到B点,此时点击B点不能触发对象的点击事件, 而点击A点可以触发。
二、相关属性介绍及使用
效果透明度动画<alpha>AlphaAnimation改变view的透明度平移动画<translate>TranslateAnimation移动view旋转动画<rotate>RotateAnimation旋转view缩放动画<scale>ScalaAnimation放大或缩小view
1、常用属性:
android:interpolator 动画的差值器, 影响动画的速率, 可以不写 默认使用加速减速差值器
android : shareInterpolator 表示动画集合是否共用一个差值器, 如果集合没有指定,那么子组件如果需要 则需要单独指定, 如果为true 自动画的差值器没有效果
android : duration 动画的时间 默认为300ms,刷新频率为 10ms/帧
android : fillAfter 动画结束后view停留的位置, true 表示停留在结束位置,false 表示动画结束放回开始位置
各种动画的独有属性
透明度动画
android: fromAlpha view透明度的起始值
android:toAlpha view透明度的结束值
平移动画
android : fromXDelta 表示X轴的起始值
android : toXDelta 表示X轴的结束值
android : fromYDelta 表示Y轴的起始值
android:toYDleta 表示Y轴的结束值
旋转动画
android : fromDegrees 旋转开始的角度
android : toDegrees 旋转结束的角度
android : pivotX 旋转轴点X轴坐标值
android : pivotY 旋转轴点Y轴坐标值
缩放动画
android : fromXScale 水平方向旋转的起始值
android : toXScale 水平方向旋转的结束值
android : fromYScale 垂直方向旋转的起始值
android : toYScale 垂直方向旋转的结束值
android : pivotX 旋转轴点X轴的坐标值
android : pivotY 旋转轴点的Y轴的坐标值
2、xml实现动画(此处使用移动动画进行示例,其他动画操作类似)
xml实现动画(此处使用移动动画为例, 其他的实现类似)
a、在res/anim目录下创建一个xml文件, 进行动画的实现。b、在代码中通过 Animation animation = AnimationUtils.loadAnimation(this, R.anim.anim);获取动画对象 然后把动画添加到view中并开始动 画,view.startAnimation(animation), 代码如下:
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:fromXDelta="100" android:toXDelta="300" android:fromYDelta="100" android:toYDelta="300" android:duration="3000"/> </set>在Java文件中进行引用
Animation animation = AnimationUtils.loadAnimation(this, R.anim.anim); view.startAnimation(animation);3、代码实现动画
TranslateAnimation animation = new TranslateAnimation(100, 300, 100, 300);animation.setDuration(3000); view.startAnimation(animation);
三、补间动画的自定义
实现步骤:
1、自定义一个类 继承 Animation
2、重写 initialize() 方法 进行初始化操作
3、重写 applyTransformation() 实现自定义动画, 一般需要借助于Camera类(android.graphics.Camera)
applyTransformation方法 的两个参数
float interpolatedTime : 差值器完成的时间 取值范围 0.0 - 1.0
Transformation t : 转换器对象 可以获取一个矩(Matrix)阵对象
示例代码如下: (本段代码摘自 《Android开发艺术探索》)
public class Rotate3dAnimation extends Animation { private int mCenterX; private int mCenterY; private float mFromDegrees; private float mToDegrees; private float mDepthZ; private boolean isReverse; //是否反向 private Camera mCamera; public Rotate3dAnimation(int mCenterX, int mCenterY, float mFromDegrees, float mToDegrees, float mDepthZ, boolean isReverse) { this.mCenterX = mCenterX; this.mCenterY = mCenterY; this.mFromDegrees = mFromDegrees; this.mToDegrees = mToDegrees; this.mDepthZ = mDepthZ; this.isReverse = isReverse; } @Override public void initialize(int width, int height, int parentWidth, int parentHeight) { super.initialize(width, height, parentWidth, parentHeight); mCamera = new Camera(); } @Override protected void applyTransformation(float interpolatedTime, Transformation t) { super.applyTransformation(interpolatedTime, t); Matrix matrix = t.getMatrix(); int centerX = mCenterX; int centerY = mCenterY; float degrees = mFromDegrees + (mToDegrees - mFromDegrees) * interpolatedTime; Camera camera = mCamera; camera.save(); if (isReverse) camera.translate(0.0f, 0.0f, mDepthZ * interpolatedTime); else camera.translate(0.0f, 0.0f, mDepthZ * (1 - interpolatedTime)); camera.rotateY(degrees); camera.getMatrix(matrix); camera.restore(); matrix.preTranslate(-centerX, -centerY); matrix.postTranslate(centerX, centerY); }
四、补间动画的特殊使用
1、 layoutAnimation 的使用
layoutAnimation 作用于viewGroup 表示为viewGroup添加一个动画,当加载viewGroup的子组件时, 会具有该动画效果
实现步骤:
a. 在res/anim 目录下创建一个xml 文件 进行layoutAnimation的设置
<?xml version="1.0" encoding="utf-8"?><layoutAnimation xmlns:android="http://schemas.android.com/apk/res/android" android:delay="0.5" android:animationOrder="normal" android:animation="@anim/anim_item"/>
android:delay 表示动画延迟的时间
android:animationOrder 表示子组件动画的顺序 normal 顺序显示 reverse 逆序显示 random 随机显示
android:animation 引用一个动画 表示子组件显示的动画
b. 在 res/anim 目录下定义需要引入的动画
<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android"> <alpha android:fromAlpha="1" android:toAlpha="0" android:duration="3000"/> <rotate android:fromDegrees="0" android:toDegrees="360" android:duration="3000"/></set>c. 在xml 布局文件中通过android:layoutAnimation 属性引入定义的layoutAnimation 文件,
<ListView android:layout_width="match_parent" android:layout_height="match_parent" android:layoutAnimation="@anim/anim_layout" android:background="#fff4f7f9" android:divider="#ffdddbdb" android:dividerHeight="1dp" android:id="@+id/listView"/>
使用动态代码实现的方式如下:
Animation animation = AnimationUtils.loadAnimation(this, R.anim.anim_item);LayoutAnimationController controller = new LayoutAnimationController(animation);controller.setDelay(0.5f);controller.setOrder(LayoutAnimationController.ORDER_NORMAL);listView.setLayoutAnimation(controller);2、 自定义activity之间切换的动画效果
activity之间的切换默认是自带动画效果的, 有时为了满足产品需求 ,需要更改动画效果。具体实现如下,
调用overridePendingTransition(int enterAnim, int exitAnim) 参数分别为进入动画和退出动画的资源ID
注意: 该方法需要在startActivity() 和 finish() 之后调用动画才会生效。
private void goActivity(Class clzz){ Intent intent = new Intent(); intent.setClass(this, clzz); startActivity(intent); finish(); overridePendingTransition(R.anim.enter_anim, R.anim.exit_anim);}Fragment 之间也可以自定义切换动画, 由于Frangment是API11 引入的, 所以要采用v4包下的Fragment(解决兼容性问题) 。通过使用FragmentTransaction类中的setCustomAnimations( int enter, int exit) 实现切换动画。
阅读全文
1 0
- Android动画系列之补间动画
- 动画系列之补间动画
- Android 动画系列之补间(Tween)动画详解
- Android 动画系列之自定义补间动画
- Android动画之补间动画
- 安卓三大动画导航之补间动画
- 动画之补间平移动画
- 动画之补间旋转动画
- 动画之补间缩放动画
- 动画之补间透明度动画
- 开始学动画之补间动画
- android动画之补间动画
- Android动画之---补间动画
- Android动画学习之补间动画
- Android动画浅析之补间动画
- Android 动画之补间动画
- Android动画之补间动画
- Android补间动画之旋转动画
- Andriod 双击回退键退出程序
- dfs+剪枝(暑假集训第三周周测E)
- MySQL基础入门——其他基本操作
- 友好数对
- SpringCloud(十二):Feign的demo之覆写Feign的默认配置
- 动画系列之补间动画
- HDU 6119 小小粉丝度度熊 (枚举 + 二分)
- Unity3d中的异步编程
- c语言 词频统计
- android vold初始化及sd卡挂载流程
- RxJava +retrofit2实现安卓中网络操作
- 生产者、消费者程序练手
- Resource之layer-list(LayerDrawable)
- 《西瓜书》笔记10:降维与度量学习-PCA(二)