Android 动画详细总结

本文详述了Android动画体系,包括View Animation的补间动画和帧动画,重点讲解了属性动画Property Animation的原理与实践,如ValueAnimator、ObjectAnimator的使用,TypeEvaluator接口的应用,以及Interpolator插值器的作用和配置。同时,介绍了如何通过xml和代码创建属性动画,并展示了自定义TypeEvaluator实现复杂动画的案例。
摘要由CSDN通过智能技术生成
目录:
1.android动画导图
2.View Animation(视图动画)
(1)Tween Animation(补间动画)
(2)Frame Animation(帧动画)
3.Property Animation(属性动画)
(1)属性动画概述
(2)相关类继承关系
(3)相关类、接口概述导图
(4)ValueAnimator类
(5)ObjectAnimator类
(6)TypeEvaluator接口相关类引入
(7)xml实现属性动画
4.Interpolator(插值器)
(1)插值器的作用与概述
(2)常见的插值器
(3)xml中设置插值器
(4代码中设置插值器
5.AnimationSet与AnimatorSet(动画集合)
6.自定义TypeEvaluator和属性实现属性动画总结案例
1.android动画导图



通过导图我们可以知道动画的实现可以通过java代码和xml文件两种方式实现,下面再学习每种动画的时候
我们试着用两种方法取实现。

2.View Animation(视图动画)
2.1 Tween Animation补间动画
(1)透明度(alpha)动画实现=淡入淡出动画
布局文件(两种实现方式一致):
   
   
   
<?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.animation.MainActivity">
 
<ImageView
android:id="@+id/alphaImage"
android:src="@drawable/weimei"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
 
</LinearLayout>

java代码实现:
   
   
   
package com.example.animation;
 
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.widget.ImageView;
 
public class MainActivity extends AppCompatActivity {
private ImageView alphaImage;
 
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//绑定布局控件
alphaImage = (ImageView) findViewById(R.id.alphaImage);
 
//实例化透明度动画,设置透明度从1f~0f
AlphaAnimation alphaAnimation = new AlphaAnimation(1f, 0f);
//设置动画时间
alphaAnimation.setDuration(2000);
//设置动画结束后保持结束时的动画状态
//alphaAnimation.setFillAfter(true);
//设置结束时保存开始时的状态
alphaAnimation.setFillBefore(true);
//设置插值器
//alphaAnimation.setInterpolator();
//设置动画循环次数
alphaAnimation.setRepeatCount(2);
//设置循环模式REVERSE|RESTART|其他
alphaAnimation.setRepeatMode(Animation.REVERSE);
//将动画设置到控件
alphaImage.startAnimation(alphaAnimation);
}
}
xml文件实现:
在src/anim/下建文件alpha_animation.xml
   
   
   
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<alpha
android:duration="2000"
android:fromAlpha="1.0"
android:toAlpha="0.0"
android:fillBefore="true"
android:repeatCount="2"
android:repeatMode="reverse"
/>
</set>
<!--
常用属性设置:
android:fromAlpha="1.0"//开始时候的透明度
android:toAlpha="0.0"//结束的透明度
android:fillAfter="true"//动画结束后保持最后的状态
android:fillBefore="true"//动画结束后回复一开始的状态
android:fillEnabled=""//效果同fillBefore
android:interpolator=""//设置动画的插值器
android:startOffset=""//设置动画开始后延迟时长度,单位毫秒
android:detachWallpaper //设置是否在壁纸上运行
android:repeatCount=""///设置动画运行次数
android:zAdjustment="normal|top|bottom"//设置动画在运行时在Z轴的位置
android:repeatMode="reverse|restart"//设置重复模式,倒叙|从头
-->

java代码引入
   
   
   
package com.example.animation;
 
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.ImageView;
 
public class MainActivity extends AppCompatActivity {
private ImageView alphaImage;
 
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//绑定布局控件
alphaImage = (ImageView) findViewById(R.id.alphaImage);
 
//xml定义动画,然后通过AnimationUtils.loadAnimation(Context context, int id)加载
Animation alphaAnimationX = AnimationUtils.loadAnimation(
MainActivity.this, R.anim.alpha_animation);
//开启动画
alphaImage.startAnimation(alphaAnimationX);
}
}

上面是通过java代码和xml布局两种方式进行动画实现,下面就只使用xml布局实现了,有兴趣的朋友可以试试用java代码取实现
,在实际开发中其实也比较推荐xml布局文件吧,毕竟它比较简洁直观,易于管理,同时也满足逻辑与布局分离的分层架构思想。

(2)旋转(rotate)动画实现
在src/anim/下建文件rotate_animation.xml
  
  
  
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<rotate
android:fromDegrees="0"
android:toDegrees="180"
android:pivotX="0"
android:pivotY="0"
android:fillAfter="true"
android:repeatCount="4"
android:repeatMode="reverse"
android:duration="2000"/>
</set>
<!--
常用属性设置:
android:fromDegrees="0"//旋转开始角度
android:toDegrees="180"//旋转结束角度
android:pivotX="50%"//旋转中心点X坐标,百分数表示(控件长度*百分数)的的位置,如果是数值表示从控件左上角开始计算,
android:pivotY="50%"//旋转中心点Y坐标
android:fillAfter="true"//动画结束后保持最后的状态
android:fillBefore="true"//动画结束后回复一开始的状态
android:fillEnabled=""//效果同fillBefore
android:interpolator=""//设置动画的插值器
android:startOffset=""//设置动画开始后延迟时长度,单位毫秒
android:detachWallpaper //设置是否在壁纸上运行
android:repeatCount=""///设置动画运行次数
android:zAdjustment="normal|top|bottom"//设置动画在运行时在Z轴的位置
android:repeatMode="reverse|restart"//设置重复模式,倒叙|从头
-->

java代码引入
   
   
   
package com.example.animation;
 
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.ImageView;
 
/**
* Created by elimy on 2016-10-20.
*/
public class RotateActivity extends AppCompatActivity {
private ImageView rotateImage;
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_rotate);
//绑定控件
rotateImage = (ImageView) findViewById(R.id.rotateImage);
//加载xml动画文件
Animation rotateAnimation = AnimationUtils.loadAnimation(
RotateActivity.this,R.anim.rotate_animation);
//启动动画
rotateImage.startAnimation(rotateAnimation);
 
}
}

(3)缩放(scale)动画实现

java代码引入部分的代码和上面的都一致,就不重复贴出来了,下面是xml布局实现缩放动画的代码
在src/anim/下建文件scale_animation.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.5"
android:toYScale="0.5"
android:pivotX="50%"
android:pivotY="50%"
android:fillAfter="true"
android:repeatCount="4"
android:repeatMode="reverse"
android:duration="2000"/>
</set>
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Android Studio中的逐帧动画是指将一系列静态图像按照一定的顺序快速播放,形成动画效果。在Android Studio中,可以使用AnimationDrawable类来实现逐帧动画。具体步骤如下: 1. 在res/drawable目录下创建一个XML文件,用于定义逐帧动画。例如,可以创建一个名为animation.xml的文件。 2. 在XML文件中,使用<animation-list>标签定义逐帧动画。在<animation-list>标签中,使用<item>标签定义每一帧的图像。例如,可以使用以下代码定义一个逐帧动画,其中包含三张图像: <animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="false"> <item android:drawable="@drawable/frame1" android:duration="100" /> <item android:drawable="@drawable/frame2" android:duration="100" /> <item android:drawable="@drawable/frame3" android:duration="100" /> </animation-list> 3. 在Java代码中,使用AnimationDrawable类加载XML文件,并将其设置为ImageView的背景。例如,可以使用以下代码实现逐帧动画: ImageView imageView = findViewById(R.id.imageView); AnimationDrawable animationDrawable = (AnimationDrawable) getResources().getDrawable(R.drawable.animation); imageView.setBackground(animationDrawable); animationDrawable.start(); 4. 运行应用程序,即可看到逐帧动画效果。 需要注意的是,逐帧动画可能会占用较多的内存和CPU资源,因此应该谨慎使用。如果需要实现复杂的动画效果,建议使用属性动画或帧动画。 ### 回答2: Android Studio是一个用于开发Android应用程序的集成开发环境(IDE)。Android Studio内置了许多功能强大的工具和组件,包括逐帧动画的支持。 逐帧动画是一种动画效果,在Android应用程序中经常被使用。它是通过连续显示一系列不同的图像帧来产生动画效果的。在Android Studio中,我们可以使用逐帧动画来为应用程序添加各种各样的动画效果。 要在Android Studio中创建一个逐帧动画,我们首先需要准备一系列的图像帧。这些图像帧可以是不同的PNG或JPEG图像文件,或者是通过Android Studio内置的绘图工具绘制出来的。然后,我们可以在res目录下创建一个XML文件,来定义逐帧动画属性和帧序列。 在XML文件中,我们可以指定逐帧动画的播放属性,例如重复次数、播放间隔等。然后,我们可以使用`<item>`标签来定义每一帧的图像资源。可以通过`<bitmap>`标签指定图像资源的来源,或者使用`<drawable>`标签指定图像资源的文件名。在`<item>`标签之间可以设置帧之间的过渡效果,例如渐变、平移等。 在代码中,我们可以使用`AnimationDrawable`类来加载并播放逐帧动画。我们可以通过`AnimationDrawable.addFrame()`方法添加每一帧的图像资源,通过`AnimationDrawable.setOneShot()`方法设置是否只播放一次,通过`AnimationDrawable.start()`方法开始播放,通过`AnimationDrawable.stop()`方法停止播放。 总结起来,Android Studio提供了逐帧动画的创建和播放的支持,通过准备一系列图像帧和定义动画属性,在代码中使用`AnimationDrawable`类加载并播放逐帧动画。这样,我们就可以为我们的Android应用程序添加生动有趣的动画效果。 ### 回答3: Android Studio是一个非常强大的集成开发环境,它提供了丰富的工具和功能帮助开发者进行Android应用的开发。其中的逐帧动画是一种常用的动画效果,它由一系列连续的静态图像组成,通过快速连续地播放这些图像,以达到动态的效果。 在Android Studio中创建逐帧动画非常简单。首先,我们需要准备好一组连续的静态图像,通常是位图或Drawable资源。然后,在res目录下创建一个名为"anim"的文件夹,并在该文件夹中创建一个XML文件,作为逐帧动画的描述文件。 在这个XML文件中,我们可以使用`<animation-list>`元素来定义逐帧动画。通过`<item>`元素,我们可以指定每一帧的图像资源,并设置持续时间。例如: ``` <animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="true"> <item android:drawable="@drawable/frame1" android:duration="100" /> <item android:drawable="@drawable/frame2" android:duration="100" /> <item android:drawable="@drawable/frame3" android:duration="100" /> ... </animation-list> ``` 在这个例子中,我们指定了三个帧,分别是frame1、frame2和frame3,并设置每一帧的持续时间为100毫秒。 完成逐帧动画的XML定义后,我们可以在布局文件或代码中使用`<ImageView>`元素来显示逐帧动画。通过设置`android:src`属性为我们创建的逐帧动画的XML文件,然后调用`start()`方法开始播放动画。 ``` <ImageView android:id="@+id/imageView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/animation" /> ``` ```java ImageView imageView = findViewById(R.id.imageView); AnimationDrawable animationDrawable = (AnimationDrawable) imageView.getDrawable(); animationDrawable.start(); ``` 这样,我们就可以在Android应用中展示逐帧动画了。可以通过调整每一帧的图像和持续时间,来实现各种不同的动画效果,丰富我们的应用界面。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值