写一个简单炫酷的app程序的打开动画

app也是有颜值,动画就是一种化妆术,他让你的app更加炫酷,首先给你看下图
这就是我们今天要做的东西

首先呢,先普及下总体的框架知识,有三种动画
(1)Drawable Animation:逐帧动画,就像电影一样,一帧一帧,拼接在一起在人眼中就是连续的,可以简单的理解为图片切换,缺点就是图片过多或过大会造成oom
(2)View Animation:视图动画,比较适合那种不用和用户交互的东湖
(3)Property Animation:是android 3.0以后加入的,为了解决视图动画的缺点,就是组件移动化为实际的移动,现在大部分也用

首先先来讲讲视图动画,也就是这次我们实现上图效果的方式,有四种动画方式这里写图片描述
你想一想我们动画就是会动的画面(view),总结下来不就是靠这四个行为:改变透明度(那些view逐渐带化的),view的旋转,view的移动,view的缩小放大,
有两种表现方式,一种是java代码,一种是xml文件,更推荐后一种,可读性会更强一些,java代码的 实现方式如下

AlPhaAnimation aa=new AlphaAnimation(0,1);//创建一个透明度动画实例
aa.setDuration(100);
view.setAnimation(aa);

很简单吧,其他三种动画同理,就是构造器不同而已,
现在我们来实现下开篇那个动图效果,首先我们需要一个布局文件先贴代码,也就是先把材料准备好

<?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"android:background="@color/blue"android:orientation="vertical" ><LinearLayout
        android:id="@+id/text_lin"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerHorizontal="true"android:orientation="vertical" ><TextView
            android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center_horizontal"android:text="医立方"android:textColor="@color/text_white"android:textSize="40sp" /><TextView
            android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center_horizontal"android:text="好玩的医立方"android:textColor="@color/text_white"android:textSize="14sp" /></LinearLayout><LinearLayout
        android:id="@+id/text_hide_lin"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerHorizontal="true"android:background="@color/blue"android:orientation="vertical" ><TextView
            android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center_horizontal"android:text="医立方"android:textColor="@color/blue"android:textSize="40sp" /><TextView
            android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center_horizontal"android:text="好玩的医立方"android:textColor="@color/blue"android:textSize="14sp" /></LinearLayout><ImageView
        android:id="@+id/image"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerHorizontal="true"android:src="@mipmap/ic_white_cube" />
</RelativeLayout>

这个布局包括一个ImageView和两个一模一样的线性布局(除了字体颜色),用来显示文字,然后把他们全部居中这里写图片描述
此时或许你会有一个为什么那些字体不显示,因为他被覆盖掉了,后面添加布局覆盖在前一层上面,所以最外层就是一个imageView而已,对于同一个位置的view,后添加的会把前面添加的给覆盖下去,这对我们后来的字体逐渐出现这是用到这种覆盖的效果,接下来我们要开始让这个动画动起来了,一开始我们先让图片先动起来先,首先我把这个动画分解为4个部分吧,
第一步,自由落体,自然就是用的是位移动画,并且在这个过程中那个图片不断的放大

     <scale
        android:duration="1200"android:fromXScale="25%"android:pivotX="50%"android:pivotY="50%"android:fromYScale="25%"android:toXScale="125%"android:toYScale="125%"android:interpolator="@android:anim/linear_interpolator"/><translate
        android:duration="1200"android:fromXDelta="0%"android:fromYDelta="0%"android:toXDelta="0%"android:toYDelta="80%p"/>

如果你之前没有接触过动画,可能会对这几个属性很陌生,首先duration指的就是,这个动画的持续时间,而fromX(Y)Scale和toX(Y)Scale,指的是图形x轴y轴放大起始点和终点,在我这里就是将图片充25%放大到125%,而interpolator这个属性指的是差值器,也就是用来调整变化的速度,是加速的,减速呢还是变速,有这几种值
这里写图片描述
接下来就是位移动画,同样,你想要告诉系统怎么位移肯定也就得告诉他起始点和终点吧,顾名思义,也就是fromX(Y)Delta和toX(Y)Delta啦,这里重要是是讲
80%和80%p是什么区别,这里p指的是父类,也就是说,对于位移来说,80%指的是位移自己长度的80%,而80%p指的是位移父类的长度80%,多说无益,上图
这里写图片描述
这里写图片描述
这里指展示以父类为标准的,同理没有p就是以自身为标准

第二部自然就是弹上来又掉下去啦

     <translateandroid:startOffset="1200"android:interpolator="@android:anim/decelerate_interpolator"android:duration="200"android:toYDelta="-15%p"/><translateandroid:startOffset="1400"android:interpolator="@android:anim/accelerate_interpolator"android:duration="200"android:toYDelta="15%p"/>

基本和上面差不多,多了一个新东西,也就是startOffset,指的是动画开始后多少秒执行,这里是1400ms,也就是要在第一步完成之后执行啦

接下来就是第三步啦,这个和第一步类似不过是相反,不是往下掉,二是往上弹,而且这个过程中缩小图片

<set
        android:startOffset="1600"android:interpolator="@android:anim/linear_interpolator"><scale
            android:duration="1200"android:pivotX="50%"android:pivotY="50%"android:fromXScale="100%"android:fromYScale="100%"android:toXScale="80%"android:toYScale="80%" /><translate
            android:duration="1200"android:toXDelta="-20%p"android:toYDelta="-50%p"/></set>

第四步啦,也就是字体逐渐显示,这里你想一想我们现实中的用一块布这是牌匾,然后将布从左往右啦,那么字体是不是就是从左往右逐渐显示啦?而所谓的不不就是我在布局中重复定义了,却把字体设置成和背景一样颜色的线性布局嘛,先把我们要显示字体移动到指定位置,这里是向x轴移动自身长度35%,y轴上移动,父类高度的15%,代码如下

<set xmlns:android="http://schemas.android.com/apk/res/android"android:fillAfter="true"><translate        android:fromXDelta="35%"android:fromYDelta="15%p"android:toXDelta="35%"android:toYDelta="15%p"/>
</set>

接下来就是要移动所谓‘拉布’,在这600ms时间内,他就会逐渐把遮住的字逐渐显示出来啦

<set xmlns:android="http://schemas.android.com/apk/res/android"android:duration="600"android:fillAfter="true"><translate
        android:fromXDelta="35%"android:fromYDelta="15%p"android:toXDelta="135%"android:toYDelta="15%p"/>
</set>

最后一步只需要用java代码把动画加载进去就可以了

final LinearLayout tv_lin= (LinearLayout) findViewById(R.id.text_lin);//要显示的字体final LinearLayout tv_hide_lin= (LinearLayout) findViewById(R.id.text_hide_lin);//所谓的布ImageView logo= (ImageView) findViewById(R.id.image);//图片Animation animation = AnimationUtils.loadAnimation(this,R.anim.splash);logo.startAnimation(animation);//开始执行动画animation.setAnimationListener(new Animation.AnimationListener() {@Overridepublic void onAnimationStart(Animation animation) {}@Overridepublic void onAnimationEnd(Animation animation) {//第一个动画执行完后执行第二个动画就是那个字体显示那部分animation=AnimationUtils.loadAnimation(MainActivity.this,R.anim.text_splash_position);tv_lin.startAnimation(animation);animation=AnimationUtils.loadAnimation(MainActivity.this,R.anim.text_canvas);tv_hide_lin.startAnimation(animation);}@Overridepublic void onAnimationRepeat(Animation animation) {}});

我知道看到这里你肯定还有不懂得地方,我就附上源码源码地址

ps:如果你觉得我的文章对你有帮助,那么就顶那里点一下或者github上star一下啦,也可以关注我的公众号,左上角有二维码,有什么问题都可以问我,文章会同步发布哦
ps:如果你觉得我文章哪里写错了或者哪里太糟糕了,欢迎指出,

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/1383222.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

安卓开机动画的制作

开机动画的存储位置&#xff1a; system/media/bootanimation.zip。 bootanimation.zip的文件结构&#xff1a;包含一个desc.txt和N个文件夹&#xff08;一般两个&#xff09;。desc.txt是用来指导如何执行动画页面。文件夹里存放要播放的照片&#xff08;支持png和jpg格式&am…

安卓基础动画

在开发的过程中&#xff0c;动画可以实现很好的效果&#xff0c;比如对于图片的旋转&#xff0c;电子罗盘的都可以利用动画来时实现。但是对于动画不太熟悉&#xff0c;经常想用却不会用&#xff0c;特地写这篇博客&#xff0c;记录一下对于动画的学习。 主要学习帧动画和Objec…

安卓动画:

Android的三种动画&#xff0c;即&#xff1a; •View Animation&#xff08;视图动画&#xff09; •Drawable Animation&#xff08;帧动画&#xff09; •Property Animation&#xff08;属性动画&#xff09; Drawable Animation&#xff08;帧动画&#xff09;&#xff1…

安卓手机开机动画制作原理教程

先说开机动画实现原理&#xff1a; Android的动画是由一系列的连续PNG图片作为帧组成的动画形式。 不是合成为一张GIF图片&#xff0c;而是一个文件包&#xff0c;将各帧PNG图片以压缩方式保存。 这个保存的文件名就是bootanimation.zip&#xff0c;这个文件是zip压缩文件&a…

安卓之动画制作

1.知识图谱 &#xff08;补间动画和帧动画&#xff09; 1.补间动画的效果图&#xff1a; &#xff08;alpha透明度&#xff09; &#xff08;ratate旋转&#xff09; XML代码&#xf…

Android BT

整个bluedroid可以分为两大模块&#xff1a;BTIF&#xff0c;BTE BTIF&#xff1a;提供bluedroid对外的接口;作为bluedroid与上层的framework提供interface。所以它处于bluedroid的顶层。 BTE&#xff1a;bluedroid的内部处理&#xff0c;又细分为BTA&#xff0c;BTU&#xf…

04.BT下载

04.BT下载 下载&#xff0c;是很多网络用户必备的需求之一。以往我们使用现成工具迅雷&#xff0c;我们必须保持开机&#xff0c;会员&#xff0c;合法等等要求&#xff0c;但是依托服务器&#xff0c;我们其实也可以搭建BT下载工具&#xff0c;只要你的硬盘够用&#xff0c;把…

BackTrack5(BT5)各版本下载

BT5R3(最新版本)http://www.nigesb.com/backtrack-5-r3-released.html BT5R2 KDE版32位&#xff1a; http://ftp.halifax.rwth-aachen.de/backtrack/BT5R2-KDE-32.iso GNOME32位&#xff1a;http://ftp.halifax.rwth-aachen.de/backtrack/BT5R2-GNOME-32.iso BT5R1 KDE版32位…

mysql 存储用户头像_node+vue用户头像处理上传并保存

2017年7月14日19:21:29 &#xff0c;最近做个网站&#xff0c;需要有用户头像裁剪上传功能&#xff0c;具体流程是用户在本地选择图片&#xff0c;前端将图片裁剪好发给后端&#xff0c;后端接收到图片将它保存起来&#xff0c;并将信息存入数据库。 先说一下环境后端是express…

java 根据用户名生成头像。

先上效果图 自行根据需求修改代码 package com.space; import java.awt.*; import java.awt.geom.RoundRectangle2D; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.util.Random; import java.util.regex.Matcher; im…

支付宝小程序serverless---获取用户信息(头像)并保存到云数据库

支付宝小程序serverless—获取用户信息&#xff08;头像&#xff09;并保存到云数据库 博客说明 文章所涉及的资料来自互联网整理和个人总结&#xff0c;意在于个人学习和经验汇总&#xff0c;如有什么地方侵权&#xff0c;请联系本人删除&#xff0c;谢谢&#xff01; 我又回…

湘大 XTU OJ 1260 Completed String 题解(非常详细):建立数组下标和数组元素之间的映射关系 ~scanf

一、链接 1260 Completed String 二、题目 题目描述 给一个字符串&#xff0c;请判断字符串是否出现了所有的英文字母&#xff08;不区分大小写&#xff09;。 输入 每行一个只含英文字母的字符串&#xff0c;长度不超过1000。 输出 每行输出一个样例的结果&#xff0c…

openCV配置+cmake操作记录--Ubuntu 16.04版本

项目需要openCV相关操作,于是找了好多教程,琢磨了好久,写个笔记。 更新ubuntu上的一些库: sudo apt-get update sudo apt-get upgrade 安装一些库:(虽然我现在也不明白这玩意,我是纯小白/(ㄒoㄒ)/~~) sudo apt-get install cmake sudo apt-get install build-essen…

笔记2:openCV打开摄像头显示到QT的QLabel--Ubuntu系统

目的: 通过openCV调用摄像头,把捕捉到的画面显示到QT的QLabel控件上。 听起来很easy的样子,我的coding能力很弱,可以找个我是理学院出身的借口,但现实是谁会听你的借口呢,希望这笔记不是给我未来参考的,而是为了博未来的自己一笑,那样才能说明我是进步的哈。 效果:…

【二叉树】1-5,理论基础、前中后序遍历的递归法和迭代法、层序遍历

理论基础、前中后序遍历的递归法和迭代法、层序遍历 1&#xff0c;二叉树的种类满二叉树完全二叉树二叉搜索树平衡二叉搜索树 2&#xff0c;存储方式链式存储线式存储 3&#xff0c;二叉树的遍历深度优先搜索前序遍历&#xff08;递归法、迭代法&#xff09;中序遍历&#xff0…

fork创建多个子进程

fork创建多个子进程 示例代码 fork1.c #include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <unistd.h>int main(int argc,char **argv) {int i, j;pid_t pid;for (i 0; i < 3; i){pid fork();if (pid < 0){perror(&q…

苹果6换屏多钱_iPhone12屏幕维修多少钱 苹果12换屏价格汇总

苹果iPhone12系列手机如果屏幕坏了要维修换屏的话&#xff0c;需要多少钱呢&#xff0c;官方的换屏价格是多少&#xff0c;这里我们来了解下iPhone12系列手机官方渠道换屏价格。 1、iPhone12保外屏幕维修费用 2149元&#xff0c;iPhone12Pro屏幕维修费用2149元&#xff0c;由于…

合并两个有序链表

就像一个贪吃蛇将两个链表一一的吃进来 class Solution(object):def mergeTwoLists(self, list1, list2):""":type list1: Optional[ListNode]:type list2: Optional[ListNode]:rtype: Optional[ListNode]"""p ListNode(0)cur pwhile list1 a…

如何在CSS中水平居中一个元素?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 使用 margin: 0 auto⭐ 使用 Flexbox 布局⭐ 使用绝对定位和负边距⭐ 使用表格布局⭐ 使用网格布局⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅…

Flink CDC系列之:TiDB CDC 导入 Elasticsearch

Flink CDC系列之&#xff1a;TiDB CDC 导入 Elasticsearch 一、通过docker 来启动 TiDB 集群二、下载 Flink 和所需要的依赖包三、在TiDB数据库中创建表和准备数据四、启动Flink 集群&#xff0c;再启动 SQL CLI五、在 Flink SQL CLI 中使用 Flink DDL 创建表六、Kibana查看Ela…