Android移动应用开发之制作动画基础
文章目录
- 帧动画
- 主要文件目录
- MainActivity
- frame.xml
- activity_main.xml
- 运行
- 补间动画
- 主要文件目录
- MainActivity
- alpha.xml
- rorate.xml
- scale.xml
- translate.xml
- activity_main.xml
- 运行
- 属性动画
- 主要文件目录
- MainActivity
- activity_main.xml
- 运行
帧动画
顾名思义,需要我们准备好一帧一帧的图片,然后连续播放组成动画。
主要文件目录
MainActivity
package zufe.scq.hunter;import androidx.appcompat.app.AppCompatActivity;import android.app.AlertDialog;
import android.content.DialogInterface;
import android.graphics.drawable.AnimationDrawable;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.PopupWindow;
import android.widget.RelativeLayout;public class MainActivity extends AppCompatActivity {private boolean flag = true;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);RelativeLayout relativeLayout = findViewById(R.id.rl);AnimationDrawable anim = (AnimationDrawable) relativeLayout.getBackground();relativeLayout.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {if(flag){anim.start();flag=false;}else{anim.stop();flag=true;}}});}
}
frame.xml
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"><item android:drawable="@drawable/frame1" android:duration="320"/><item android:drawable="@drawable/frame2" android:duration="320"/><item android:drawable="@drawable/frame3" android:duration="320"/>
</animation-list>
这里就是把准备好的图片放进去就行,duration表示每帧播放的时长
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/rl"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@drawable/frame"/>
相当于将frame.xml当成了一个图片直接调用了。
这里设置id,方便控制动画的进行和停止。
运行
运行一开始不动。
点击一下动画开始,再点一下动画结束。
补间动画
补间动画就是Android会自己帮我们补齐动画,有四种类型分别是透明度、旋转、缩放和评议四种。
主要文件目录
MainActivity
package zufe.scq.hunter;import androidx.appcompat.app.AppCompatActivity;import android.app.AlertDialog;
import android.content.DialogInterface;
import android.graphics.drawable.AnimationDrawable;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.PopupWindow;
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);imageView.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// 透明度
// 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);
// imageView.startAnimation(animation);// 平移Animation animation = AnimationUtils.loadAnimation(MainActivity.this,R.anim.translate);imageView.startAnimation(animation);}});}
}
alpha.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<alphaandroid:fromAlpha="0"android:toAlpha="1"android:duration="2000"/>
</set>
rorate.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"><rotateandroid:toDegrees="360"android:fromDegrees="0"android:pivotX="50%"android:pivotY="50%"android:duration="2000"/>
</set>
scale.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"><scaleandroid:fromXScale="1"android:fromYScale="1"android:toXScale="0.5"android:toYScale="0.5"android:pivotY="50%"android:pivotX="50%"android:duration="2000"/>
</set>
translate.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"><translateandroid:fromXDelta="0"android:fromYDelta="0"android:toXDelta="400"android:toYDelta="400"android:duration="2000"/>
</set>
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"><ImageViewandroid:id="@+id/iv"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerInParent="true"android:adjustViewBounds="true"android:maxWidth="300dp"android:maxHeight="300dp"android:src="@drawable/frame3"/>
</RelativeLayout>
运行
透明度
旋转
缩放
平移
属性动画
简单来说,就是可以持续改变属性值,达到动画的效果。
主要文件目录
MainActivity
package zufe.scq.hunter;import androidx.appcompat.app.AppCompatActivity;import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.animation.ObjectAnimator;
import android.animation.ValueAnimator;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.graphics.drawable.AnimationDrawable;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.PopupWindow;
import android.widget.RelativeLayout;public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 控制某个属性ValueAnimator valueAnimator = ValueAnimator.ofFloat(0f, 1f);valueAnimator.setDuration(2000);valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {@Overridepublic void onAnimationUpdate(ValueAnimator animation) {float value = (float) animation.getAnimatedValue();
// Log.e("hunter", "OnAnimationUpdate"+value);}});valueAnimator.start();// 控制控件ImageView imageView = findViewById(R.id.iv);ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(imageView,"alpha", 0f, 1f);objectAnimator.setDuration(4000);// 一组监听
// objectAnimator.addListener(new Animator.AnimatorListener() {// @Override
动画开始时调用
// public void onAnimationStart(Animator animation) {// Log.e("hunter", "start");
// }
//
结束
// @Override
// public void onAnimationEnd(Animator animation) {// Log.e("hunter", "over");
// }
//
取消
// @Override
// public void onAnimationCancel(Animator animation) {// }
重复
// @Override
// public void onAnimationRepeat(Animator animation) {//
// }
// });// 单个监听objectAnimator.addListener(new AnimatorListenerAdapter() {@Overridepublic void onAnimationStart(Animator animation) {super.onAnimationStart(animation);Log.e("hunter", "Start");}});objectAnimator.addListener(new AnimatorListenerAdapter() {@Overridepublic void onAnimationEnd(Animator animation) {super.onAnimationEnd(animation);Log.e("hunter", "end");}});objectAnimator.setStartDelay(1);objectAnimator.start();}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"><ImageViewandroid:id="@+id/iv"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerInParent="true"android:adjustViewBounds="true"android:maxWidth="300dp"android:maxHeight="300dp"android:src="@drawable/frame3"/>
</RelativeLayout>
运行
运行可以看到透明度发生变化
控制台有对应事件监听的输出
Android移动应用开发之制作动画基础相关推荐
- Android Studio(4)---开发人员工作流程基础
开发人员工作流程基础 开发Android应用程序的工作流程在概念上与其他应用程序平台相同.但是,要有效地为Android构建精心设计的应用程序,您需要一些专门的工具.以下列表概述了构建Android应 ...
- android 控件发光_如何在android中的按钮周围制作动画/常量发光效果?
的按钮有一个背景绘制的图像,我只是想拥有它周围的发光效果,使它有点与音乐播放 我已经搜查各地的多个线程共鸣,他们要么只是一个ImageView的,或在压制,或位图,所以不一定是我寻求 这里是我的按钮X ...
- 学习笔记(2):基于NDK、C++、FFmpeg的android视频播放器开发实战-音视频基础知识Mpeg4封装格式音视频编码格式讲解...
立即学习:https://edu.csdn.net/course/play/7417/151027?utm_source=blogtoedu 封装:将音视频从文件中读出来 解码:解压出来,转换成显卡支 ...
- android微信动画制作,动画制作轻量级SDK:PAG六大优势助力开发
原标题:动画制作轻量级SDK:PAG六大优势助力开发 动画特效可以辅助视觉制作焦点,引导注意力的方向,越来越为广大视觉设计师青睐,并广泛应用于各类场景开发. 关于动画设计工具,既有 Framer.js ...
- 【前端实例代码】霓虹灯按钮动画效果悬停2| html CSS特效 惊艳| 前端开发 网页制作 基础入门教程
b站视频演示效果: [web前端特效源码]霓虹灯按钮动画效果悬停2| html CSS特效 惊艳| 前端开发 网页制作 基础入门教程 效果图: 完整代码: <!DOCTYPE html> ...
- 【前端实例代码】霓虹灯按钮动画效果悬停| html CSS特效 惊艳| 前端开发 网页制作 基础入门教程
b站视频演示效果: [web前端特效源码]霓虹灯按钮动画效果悬停| html CSS特效 惊艳| 前端开发 网页制作 基础入门教程 效果图: 完整代码: <!DOCTYPE html> & ...
- 【前端实例代码】使用 HTML CSS实现指纹扫描仪特效动画效果 |前端开发 网页制作 基础入门教程 网页开发中常见的样式与特效,收藏起来肯定用的上~
b站视频演示效果: [web前端特效源码]使用 HTML CSS 和 JavaScript 实现指纹扫描仪特效动画效果 |前端开发 网页制作 基础入门教程 效果图: 完整代码: <!DOCTYP ...
- sketch制作Android动画,Sketch制作GIF动画——基础篇(改良版)
前言 其实这个教程是我在原版教程的基础上经过一些实验后从新得出的更完善的方法,在此为各位补足遗漏的部分以及一些改良后的效果,希望大家喜欢之余,为我点个赞,感谢:pray: 使用sketch不仅能够制作 ...
- sketch制作Android动画,Sketch制作GIF动画--基础篇
前言 自从小tan上次出了一篇关于用Sketch制作自定义的APP下拉刷新GIF动画后,有不少小伙伴说期待出一篇关于Sketch制作GIF动画的详细教程.由于前段时间小tan都在忙于私人的家事,一直都 ...
最新文章
- python需要下载哪些插件-python需要装哪些工具包
- 计算机社团优秀成员申请书,优秀社团的成员申请书
- ubuntu中supervisor的安装和学习
- vue js 和原生app调用回调方法问题
- Glibc 和 uClibc的区别
- checkbox-复选框
- 强者不能恒强,偏向虎山行
- 第十章 提升论文的可读性 --《英语科技写作(文法与修辞原则)》by 方克涛
- Mysql查询字段去除指定列重复数据
- c语言顺序栈的基本操作
- flink的测试sql怎么测试呢,不能每次都使用jar测试吧,那么sqk-client就来了
- 解决无线路由器无法进行账号认证上网的问题
- Microsoft Excel 教程,如何在 Excel 中使用自动求和?
- 整理的几种适用于GROMACS输入的小分子拓扑文件获取流程
- R语言技巧:读取excel文件
- 深度学习图像处理目标检测图像分割计算机视觉 04--神经网络与误差反向传播BP算法
- iOS开发-ios7样式绕圈活动指示器(自定义Activity Indicator View)
- LDO稳压器详解(一)-参数概念
- 2018年最流行JavaScript明星项目
- Linux下GUI开发:GTK+ 2.0 + anjuta + glade
热门文章
- BZOJ_1778_[Usaco2010 Hol]Dotp 驱逐猪猡_概率DP+高斯消元
- windows无法telnet解决办法
- 前端面试知识梳理(高级前端开发工程师)
- 在windows环境下搭建mac os
- progress的高级过程调用以及全局变量
- 【手把手教安装】VM16 Pro安装Win10!!!
- sqlmap tamper mysql_Sqlmap Tamper大全(1)
- tp5原生SQL:读操作(query方法)
- 国密算法(SM2,SM3,SM4)完善与算法辅助工具开发
- 深富策略军工股掀起涨停潮