Android动画(帧动画、补间动画、属性动画)讲解

article/2025/8/20 22:28:07

Android动画(帧动画、补间动画、属性动画)讲解

首先我们来看看啥是帧动画、补间动画、属性动画。

介绍:

帧动画:是一种常见的动画形式(Frame By Frame),其原理是在“连续的关键帧”中分解动画动作,也就是在时间轴的每帧上逐帧绘制不同的内容,使其连续播放而成动画。

补间动画:指的是做FLASH动画时,在两个关键帧中间需要做“补间动画”,才能实现图画的运动;

属性动画:帧动画与补间动画实现了对View进行移动、缩放、旋转和淡入淡出的效果。但对于android开发师来说是不够的,同时移动、缩放、旋转和淡入淡出的效果也不再只是一种视觉上的动画效果了。所以从Android 3.0版本开始,系统给我们提供了一种全新的动画模式,属性动画(property animation)。

所以今天我们来看看,这些动画是怎样实现的。

帧动画(我们先来看看效果)

在这里插入图片描述

首先我们创建我们要的素材,把他们导入到drawable文件夹下,如图。
在这里插入图片描述

然后在drawable文件新建from.xml文件,写入代码,这里的作用可以理解为,我们把图片
放到一个集合里面去了,要用的时候我们直接调用from。

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"><item android:drawable="@drawable/a" android:duration="120" /><item android:drawable="@drawable/b" android:duration="120" /><item android:drawable="@drawable/c" android:duration="120" /><item android:drawable="@drawable/d" android:duration="120" /><item android:drawable="@drawable/e" android:duration="120" /><item android:drawable="@drawable/f" android:duration="120" /><item android:drawable="@drawable/g" android:duration="120" /><item android:drawable="@drawable/h" android:duration="120" /></animation-list>

然后在activity_main.xml文件里写入

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/tl"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@drawable/from"></RelativeLayout>

然后在MainActivity.java文件写入代码

package com.example.a2022324;import androidx.appcompat.app.AppCompatActivity;import android.graphics.drawable.AnimationDrawable;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.view.View;
import android.widget.RelativeLayout;public class MainActivity extends AppCompatActivity {private boolean flag;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);RelativeLayout relativelayout = findViewById(R.id.tl); //获取activity——main的RelativeLayout 的idAnimationDrawable anim = (AnimationDrawable) relativelayout.getBackground();// anim作用获取背景,这里我们的被禁就是我们设置的图片集合(from)relativelayout.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {if(flag){//用开关来实现点击动与不动的效果anim.start();flag = false;}else{anim.stop();flag = true;}}});}
}

我们点击运行完成了效果。

补间动画

alpha:图片渐渐地显示,渐渐地消失的效果。
rotat:图片的以某一点为中心,旋转xx度
scale:图片的放大与缩小
translate:图片的平移

然后我们来看看补间动画,首先来看看效果。

在这里插入图片描述

我们在res文件先创建amin目录在分别创建alpha、rotate、scale、tranlslate.xml文件。

先看看alpha.xml和activity.xml文件

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"><alphaandroid:duration="2000"android:fromAlpha="0"android:toAlpha="1" /></set>
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:ignore="MissingClass"><ImageViewandroid:id="@+id/iv"android:src="@drawable/background"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerInParent="true"//说明一下,第一个属性,只要你容器是RelativeLayout的时候才有。此时设置为RelativeLayout里的子控件属性为android:layout_centerInParent=”true“,就是水平垂直都居中。android:adjustViewBounds="true"//调整ImageView的边界,使得ImageView和图片有一样的长宽比例。android:maxHeight="300dp"android:maxWidth="300dp"/></RelativeLayout>

android:adjustViewBounds的用法这里可以看看这位小哥哥的我是连接(https://www.jianshu.com/p/49f8d5e5965b?utm_campaign=haruki)

再看看MainActivity.java文件,这里我把其他功能也加了上去,避免代码冗余,不过注释掉了,不会影响结果。

package com.example.a2022324;import androidx.appcompat.app.AppCompatActivity;import android.graphics.drawable.AnimationDrawable;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.ImageView;
import android.widget.RelativeLayout;public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);ImageView imageview = findViewById(R.id.iv);//获取id值imageview.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {//通过animation来加载alpha文件,下面的原理同理Animation animation = AnimationUtils.loadAnimation(MainActivity.this,R.anim.alpha);//                Animation animation = AnimationUtils.loadAnimation(MainActivity.this,
//                        R.anim.rotate);//                Animation animation = AnimationUtils.loadAnimation(MainActivity.this,
//                        R.anim.scale);//                Animation animation = AnimationUtils.loadAnimation(MainActivity.this,
//                        R.anim.translate);imageview.startAnimation(animation);}});}
}

属性动画

我们先来看看效果。

在这里插入图片描述

这里我们可以看出,文字渐隐出现,我们直接看代码

activity_main

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:ignore="MissingClass"><TextViewandroid:id="@+id/tv"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="快看我,我要变化了"android:textSize="20sp"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintRight_toRightOf="parent"app:layout_constraintTop_toTopOf="parent"app:layout_constraintBottom_toBottomOf="parent"/></androidx.constraintlayout.widget.ConstraintLayout>

这里我们用到了androidx.constraintlayout.widget.ConstraintLayout这一坨玩意,
如果你的包红了,那是因为没用引入库。在app->的build.gradle文件的dependencies写入==implementation ‘androidx.constraintlayout:constraintlayout:1.1.3’==这一坨玩意。如图。

**加粗样式**

我们再来看看,mainactivity代码:

package com.example.a2022324;import androidx.appcompat.app.AppCompatActivity;import android.animation.ObjectAnimator;
import android.animation.ValueAnimator;
import android.graphics.drawable.AnimationDrawable;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);ValueAnimator valueAnimator = ValueAnimator.ofFloat(0f, 1f);//改变float的值,0f是透明的,1f是不透明的// ValueAnimator.ofArgb()valueAnimator.setDuration(2000);valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {@Overridepublic void onAnimationUpdate(ValueAnimator valueAnimator) {float value = (float) valueAnimator.getAnimatedValue();}});valueAnimator.start();TextView textView = findViewById(R.id.tv);ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(textView, "alpha",0f, 1f);//objectAnimator 作用是  让我们的textView的透明度从0f到1fobjectAnimator.setDuration(4000);//从0f到1f要4秒objectAnimator.start();//启动}
}

ValueAnimator的用法可以看看这位大佬的用法我是连接
(https://blog.csdn.net/u011043551/article/details/65938908)

效果完成。(求关注)


http://chatgpt.dhexx.cn/article/FGnjodXe.shtml

相关文章

Android动画学习记录一(Android动画种类、补间动画和帧动画)

Android动画学习记录一&#xff08;动画种类、补间动画和帧动画&#xff09; 动画种类、补间动画和帧动画 Android动画学习记录一&#xff08;动画种类、补间动画和帧动画&#xff09;一、动画种类二、View动画2.1 补间动画补间动画公有属性平移动画&#xff08;Translate&…

Android动画分类与总结

前言 动画的使用 是 Android 开发中常用的知识可是动画的种类繁多、使用复杂&#xff0c;每当需要 采用自定义动画 实现 复杂的动画效果时&#xff0c;很多开发者就显得束手无策本文将献上一份Android动画的全面介绍攻略&#xff0c;包括动画的种类、使用、原理等&#xff0c;…

Android动画分析(ValueAnimator)

动画创建 先看入口函数&#xff1a; 参数很熟悉了&#xff0c;具体看里面做了什么&#xff0c;其实也很简单&#xff0c;创建一个实例对象&#xff0c;并将参数设置到对象中。 第一个参数暂时先不看&#xff0c;看第二个参数&#xff0c;**anim.setObjectValues(values)**重…

好看的android动画效果

这段时间看到一些比较好看的android动画效果&#xff0c;下面我就给大家一些我比较喜欢的动画效果&#xff0c;并附上源码希望对你们有用处。 1.很简单却很酷的粒子破碎效果 介绍&#xff1a; 实现思路 1.新建一个 Bean Particle&#xff0c;表示一个粒子对象&#xff1b;新…

Android 动画系列二之补间动画

1. 前言 Android三种动画中的第二种——补间动画(Tween)&#xff0c;和帧动画不同&#xff0c;帧动画 是通过连续播放图片来模拟动画效果&#xff0c;而补间动画开发者只需指定动画开始&#xff0c;以及动画结束"关键帧"&#xff0c; 而动画变化的"中间帧"…

Android动画大合集

android中的动画实现方式繁多&#xff0c;在项目中也经常用到动画&#xff0c;网上有很多人也都进行了一些总结&#xff0c;但是感觉还是零零散散&#xff0c;自己总结一下才能加深印象&#xff0c;以后有时间了&#xff0c;也可以从各个分类里进一步去补充完善。 如果喜欢看G…

Android中动画详细讲解

一、前言 Android动画经常会在切换activity、数据加载时会用到动画效果&#xff0c;以前接触的比较少&#xff0c;用的都是封装好的动画效果&#xff0c;自己写的比较少&#xff0c;今天心血来潮想写一个自己设计的动画效果&#xff0c;发现学习动画代码比较简单&#xff0c;但…

android 动画中插值器Interpolator详解

1、插值器简介–Interpolator 通俗易懂的说&#xff0c;Interpolator负责控制动画变化的速率&#xff0c;即确定了 动画效果变化的模式&#xff0c;使得基本的动画效果能够以匀速、加速、减速、抛物线速率等各种速率变化 动画是开发者给定开始和结束的“关键帧”&#xff0c;…

Android中的属性动画

1.属性动画简介 接下来我们学习Android动画中的第三种动画——属性动画(Property Animation) Animation一般动画就是我们前面学的帧动画和补间动画&#xff01;Animator则是本节要讲的属性动画&#xff01; 1.1为什么要用属性动画 补间动画功能比较单调,只有四种动画(透明度…

android 动画库

1. Spruce(安卓动画库)&#xff08;是一个轻量级的动画库&#xff0c;可以帮助排版屏幕上的动画。使用有很多不同的动画库时&#xff0c;开发人员需要确保每个视图都能够在适当的时间活动。&#xff09; 2. Litho&#xff08;是一个非常强大的框架&#xff0c;以声明的方式构建…

android动画类型有哪几种,Android动画概念大揭秘

前言 说起Android里面的动画,我可能会立马想起平移、旋转、渐变、缩放等动画效果,但是对于他们的属性就记的不太清了,知道的都是皮毛而且很容易忘记,每次需要用到的时候总要去baidu或者google,完全无法做到灵活应用,信手拈来。所以抽时间重新温故了一下动画相关的知识,把…

Android 动画分类

前言 动画的使用 是 Android 开发中常用的知识可是动画的种类繁多、使用复杂&#xff0c;每当需要 采用自定义动画 实现 复杂的动画效果时&#xff0c;很多开发者就显得束手无策本文将献上一份Android动画的全面介绍攻略&#xff0c;包括动画的种类、使用、原理等&#xff0c;能…

Android动画

这篇博客主要总结一下自己在项目中对动画的一些使用。我写博客&#xff0c;其实更多的是总结自己在工作中用到的一些知识。比如某一段时间一个知识点相关的技术用的比较多&#xff0c;那我会总结一下。其实&#xff0c;对于Android动画的总结&#xff0c;这是几个月前就应该写完…

Android动画之帧动画

在Android开发时&#xff0c;为了实现一些动态的炫酷的效果&#xff0c;我们常用到帧动画&#xff0c;View动画&#xff08;补间动画&#xff09;和属性动画&#xff0c;今天就来总结下我在使用帧动画的实现方式。 1、什么是帧动画&#xff1f; 帧动画就是顺序播放一组预先定…

【Android】动画

概念 动画实际上就是在指定的时间段内持续的修改某个属性的值&#xff0c;使得该值在指定取值范围之内平滑的过渡 android中的动画分为&#xff1a;View动画、帧动画和属性动画 帧动画 Frame动画是一系列图片按照一定的顺序展示的过程&#xff0c;它的原理是在一定的时间段内切…

STM32 LWIP SNTP实现毫秒级的时间校准

1、首先配置LWIP支持SNTP 然后在opt.h中增加一个timeout->LWIP_SNTP 防止出现类似 Assertion "sys_timeout: timeout ! NULL, pool MEMP_SYS_TIMEOUT is empty" failed at line 190 in ../Middlewares/Third_Party/LwIP/src/core/timeouts.c 这样的错误。 /*…

NTP/SNTP协议介绍和校时服务器搭建

文|Seraph 本文主要简单介绍用于校时的NTP/SNTP协议 同时&#xff0c;以windows 2008 R2为例&#xff0c;搭建NTP/SNTP服务器 NTP可参考文献RFC1305&#xff0c;SNTP可参考文献RFC1796 1. 应用场景 一般应用&#xff0c;连上公网即可通过NTP/SNTP协议进行校时&#xff0c;例如…

linux sntp 代码,C语言window(linux)平台的SNTP实现

C语言实现window(linux)平台的SNTP&#xff0c;本程序功能主要是实现电脑(或者设备)时间同步。摘录部分代码&#xff1a; unsigned char liVnMode; /* LeapSecond(2bits:0), VersionNumber(3bits: 3), Mode(3bits: Client3, Server4) */ unsigned char stratum; /* 时间层级 (0…

学习日记——ESP8266SNTP

SNTP基本知识 1、定义 SNTP是简单网络时间协议&#xff0c;而NTP网络时间协议就是网络计算机上同步计算时间的协议&#xff0c;具有高度的精确性&#xff0c;实际上也用不到这么高精度的算法。所以就在NTP上简化了以下变成SNTP&#xff0c;SNTP协议主要被用来同步因特网上计算…

WiFi开发|ESP8266模组SDK开发之SNTP协议

ESP8266模组SDK开发之SNTP协议 1. NTP和SNTP NTP 是网络时间协议&#xff08;Network Time Protocol&#xff09;&#xff0c;是用来同步网络设备&#xff08;如计算机、手机&#xff09;的时间的协议 SNTP由NTP改编而来&#xff08;简单网络时间协议&#xff0c;Simple Net…