Android开发中基础动画技巧的应用(二)

简介: Android开发中基础动画技巧的应用

5.Animation类中的通用方法


       上面介绍的4种动画实际上都是Animation类的子类,Animation类中封装了许多动画通用的方法,例如前面使用的设置动画执行时间的方法setDuration就是Animation类的方法,其中更多常用方法列举如下:


//取消正在执行的动画

public void cancel();

//设置动画的执行函数

public void setInterpolator(Interpolator i);

//这只方法设置开始动画的延时值 单位为毫秒

public void setStartOffset(long startOffset);

//设置动画的执行时间

public void setDuration(long durationMillis);

//设置动画特效的最长运行时间

public void restrictDuration(long durationMillis);

//设置动画的执行强度比例 例如放大两倍的动画 这个值如果设置为2 将被放大4倍

public void scaleCurrentDuration(float scale);

//为动画设置一个开始的时间

public void setStartTime(long startTimeMillis);

//设置动画循环模式

/*

只有当动画的循环次数大于1时这个值才有效果,其可以设置为如下常量:

RESTART 每次循环都从头执行

REVERSE 正逆交替执行

*/

public void setRepeatMode(int repeatMode);

//设置循环次数 设置为INFINITE则为无限循环

public void setRepeatCount(int repeatCount);

//设置是否允许填充动画 这个方法设置为true后setFillBefore()与setFillAfter()方法才会生效

public void setFillEnabled(boolean fillEnabled);

//动画结束后 是否以起始位置填充视图

public void setFillBefore(boolean fillBefore);

//动画结束后 是否以结束位置填充视图

public void setFillAfter(boolean fillAfter)

//设置动画执行时在Z轴上的位置

/*

可以设置为如下3中常量

   public static final int ZORDER_BOTTOM = -1; //将动画放在Z轴最下边

   public static final int ZORDER_NORMAL = 0;  //将动画放在Z轴原位置

   public static final int ZORDER_TOP = 1;     //将动画放在Z轴最上边

*/

public void setZAdjustment(int zAdjustment);

//设置动画的执行是否影响到壁纸

public void setDetachWallpaper(boolean detachWallpaper);

//获取动画是否开始执行了

public boolean hasStarted();

//获取动画是否结束执行了

public boolean hasEnded();

上面列举的方法中,setInterpolator()方法很有意思,其可以设置动画执行的时间函数,例如是先快后慢还是先慢后快等等,这个方法需要传入一个Interpolator类型的参数,实际上使用时是通过Interpolator的子类来实现的,示例如下:


ranslateAnimation.setInterpolator(new AccelerateDecelerateInterpolator());

对于Interpolator参数开发者可以设置的子类及意义列举如下:


AccelerateDecelerateInterpolator:先加速后减速执行


AccelerateInterpolator:加速执行


AnticipateInterpolator:先后退执行一步后正向加速执行(类似弹簧效果)


image.png


AnticipateOvershootInterpolator:先后退执行一步后加速执行到达极限后再前进一步后再回到极限(弹簧)


image.png


BounceInterpolator:动画执行到结尾后进行阻尼效果

image.png



CycleInterpolator:以正弦规则循环执行数次动画,这个类来构造时需要传入循环次数,如下:


new CycleInterpolator(3)

DecelerateInterpolator:减速执行动画


FastOutLinearInInterpolator:基于贝塞尔曲线的速率变化


FastOutSlowInInterpolator:基于贝塞尔曲线的速率变化


LinearInterpolator:线性匀速执行


LinearOutSlowInInterpolator:基于贝塞尔曲线的速率变化


OvershootInterpolator:执行超出极限后在回退


image.png


PathInterpolator:自定义运动路径


6.实现对Animation动画状态的监听


       Animation类中也定义了一个监听器协议,其中提供了对动画状态进行监听的方法,如下:


public interface AnimationListener {

   //当动画开始执行时触发的方法

   void onAnimationStart(Animation var1);

   //动画执行结束后触发的方法

   void onAnimationEnd(Animation var1);

   //动画重复执行的时候会触发

   void onAnimationRepeat(Animation var1);

}

7.使用xml文件配置View Animation


       上面介绍的全部是通过代码来创建View Animation动画,Android也支持使用xml文件来配置View Animation动画。


首先在Android Studio的res目录中创建一个动画文件目录,将其类型选择为anim,如下图所示:


image.png


在创建的目录中创建一个新的xml文件,在其中编写动画代码如下:


<?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"/>

</set>

在代码中,使用如下代码来加载xml配置的动画:


//加载动画文件

Animation animation = AnimationUtils.loadAnimation(this,R.anim.my_anmi);

//执行动画

animationImageView.startAnimation(animation);

8.复合的View Animation


       View Animation也支持进行复合动画的操作,如果使用xml配置复合动画,十分简单,只需要将要要复合的动画都配置进xml文件的set标签中即可,如下:


<?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"/>

   <scale android:fromXScale="1" android:toXScale="2" android:fromYScale="1" android:toYScale="2" android:duration="3000"/>

</set>



如果要用代码创建复合动画,需要使用到AnimationSet类进行复合,示例如下:


//创建动画集合容器 参数决定容器中所有动画是否共用Interpolator时序函数

AnimationSet set = new AnimationSet(true);

//创建动画

RotateAnimation rotateAnimation = new RotateAnimation(0,360, Animation.RELATIVE_TO_SELF,1f,Animation.RELATIVE_TO_SELF,1f);

ScaleAnimation scaleAnimation = new ScaleAnimation(1,2,1,2,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);

scaleAnimation.setDuration(3000);

rotateAnimation.setDuration(3000);

//将动画添加进集合中

set.addAnimation(rotateAnimation);

set.addAnimation(scaleAnimation);

//执行动画

animationImageView.startAnimation(set);


目录
相关文章
|
6天前
|
存储 安全 Android开发
安卓应用开发:构建一个高效的用户登录系统
【5月更文挑战第3天】在移动应用开发中,用户登录系统的设计与实现是至关重要的一环。对于安卓平台而言,一个高效、安全且用户体验友好的登录系统能够显著提升应用的用户留存率和市场竞争力。本文将探讨在安卓平台上实现用户登录系统的最佳实践,包括对最新身份验证技术的应用、安全性考量以及性能优化策略。
|
21小时前
|
Java API 开发工具
java与Android开发入门指南
java与Android开发入门指南
6 0
|
1天前
|
安全 Java Android开发
构建高效Android应用:采用Kotlin进行内存优化的策略
【5月更文挑战第8天】 在移动开发领域,性能优化一直是开发者关注的焦点。特别是对于Android应用而言,合理管理内存资源是确保应用流畅运行的关键因素之一。近年来,Kotlin作为官方推荐的开发语言,以其简洁、安全和互操作性的特点受到开发者青睐。本文将深入探讨利用Kotlin语言特性,通过具体策略对Android应用的内存使用进行优化,旨在帮助开发者提高应用性能,减少内存消耗,避免常见的内存泄漏问题。
3 0
|
2天前
|
Java Android开发 开发者
Android10 修改开发者选项中动画缩放默认值
Android10 修改开发者选项中动画缩放默认值
8 0
|
2天前
|
Android开发 Kotlin
Kotlin开发Android之基础问题记录
Kotlin开发Android之基础问题记录
13 1
|
2天前
|
Java Android开发
Android开发@IntDef完美替代Enum
Android开发@IntDef完美替代Enum
9 0
|
2天前
|
XML Java Android开发
android的三种动画
android的三种动画
8 0
|
2天前
|
移动开发 数据库 Android开发
构建高效Android应用:Kotlin协程的全面应用
【5月更文挑战第7天】 在移动开发领域,性能优化与流畅的用户体验是至关重要的。随着Kotlin语言的流行,其并发神器——协程,已成为提升Android应用性能的重要工具。本文将深入探讨如何在Android项目中利用Kotlin协程进行异步编程、网络请求和数据库操作,以及如何通过协程简化代码结构,增强应用的响应性和稳定性。我们的目标是为开发者提供一套实用的协程使用模式和最佳实践,以便构建更加高效的Android应用。
16 3
|
2天前
|
移动开发 数据库 Android开发
构建高效Android应用:Kotlin与协程的完美结合
【5月更文挑战第7天】 在移动开发领域,性能优化和资源管理始终是核心议题。随着Kotlin语言的普及,其提供的协程特性为Android开发者带来了异步编程的新范式。本文将深入探讨如何通过Kotlin协程来优化Android应用的性能,实现流畅的用户体验,并减少资源消耗。我们将分析协程的核心概念,并通过实际案例演示其在Android开发中的应用场景和优势。
|
3天前
|
Java Android开发
Android 开机动画的启动
Android 开机动画的启动
10 0