-
Android动画效果集合开源APP(BaseAnimation1.3)程序源码
2014-02-10 20:31:352.高仿动画效果增加10个 3.ListView集合增加15个 4.自定义控件集合增加17个 5.页面滑动增加4个 共增加48个动画效果 下载app源码的朋友需要把 BAnim FilpLibrary BAnim NineOldLibrary 作为library加载到... -
利用MATLAB实现图片切换动画效果详解
2018-03-15 16:59:51内容摘要:本博文介绍MATLAB图片切换动画效果的制作以及GIF文件保存,并结合具体代码详细解释。介绍了利用MATLAB编程进行几幅图片的轮流切换,切换时实现与幻灯片切换相似的炫酷的图片切换特效。其中涉及一些MATLAB...内容摘要:本博文介绍MATLAB图片切换动画效果的制作以及GIF文件保存,并结合具体代码详细解释。介绍了利用MATLAB编程进行几幅图片的轮流切换,切换时实现与幻灯片切换相似的炫酷的图片切换特效。其中涉及一些MATLAB的高级图形设计,具体的函数及命令文中会详细介绍。本文先逐步介绍实现思路及代码细节,最后附上完整代码。
1. 前言
MATLAB中为数据可视化提供了全面系统的功能函数,据此可以绘制出许多形象生动的精美图像。同时MATLAB的句柄图形为用户提供了强有力的工具,可以很方便地对图形的每个可能方面进行控制,这在需要设计GUI的场合用处很大。刚接触时看到许多用MATLAB制作出炫丽的仿真动画不明觉厉,在大学的MATLAB编程课里也经常有编写一个图片切换动画的作业或课设。这里写一个有几幅图片轮流切换不同效果的程序,为此提供一个参考思路,希望对大家有所启发。
2. MATLAB动画制作
本节介绍MATLAB中动画制作的常用方式,对原理比较熟悉的读者可直接跳至第3节。众所周知动画其实是很多张图片的以一定时间间隔的逐帧切换,一个简单直接的想法当然就是下面代码中方式了。首先读取一张图片,通过for循环逐步扩大要显示图片的索引范围,达到逐步放大图片的效果。
I=imread('image.jpg');%读图 [x,y,z]=size(I);%尺寸 while 1 for i=1:100 imshow(I(1:x/100*i,1:y/100*i,:));%逐渐放大显示 end end
图2.1 显示效果图
上述代码有点粗糙,运行过程中随着图片的放大窗口也在不断抖动。这其实跟imshow( )函数有关,每次调用它显示一张图片系统就会自动新创建一个窗口,窗口的大小是根据要显示图片的大小自动缩放的,上面的for循环中不断调用imshow( )而图片的大小是不断变大的,显示窗口自然也跟着变化。
其实MATLAB为动画制作提供了三种实现方式:质点动画、电影动画、程序动画。质点动画是最简单的动画产生方式,产生一个顺着曲线轨迹运动的质点来操作;电影动画首先会保存一系列的图形数据,然后按照一定的顺序像电影一样的播放;程序动画是在图形窗口中按照一定的算法连续擦除和重绘图形对象。下面逐个简单演示一下
2.1 质点动画
质点动画由comet、comet3函数产生质点动画,分别对应二维和三维坐标下的质点。首先求解出质点完整的运动轨迹坐标x,y(三维时还有z),将x,y作为输入参数使用comet或comet3直接绘制动点。
调用格式 调用说明 comet(y) 显示质点绕着向量y的动画轨迹运动(二维) comet(x,y) 显示质点在横轴、纵轴方向的运动随向量x,y的动画轨迹(二维) comet(x,y,p) 效果与上一个相同,额外定义轨迹尾巴线的长度p*length(y),p介于0,1之间,默认为0.1 comet3函数的使用方法与comet相似。
实例代码如下:
clf; clear; grid on; vx = 100*cos(1/4*pi); vy = 100*sin(1/4*pi); t = 0:0.02:15; dx = vx*t; dy = vy*t-9.8*t.^2/2; comet(dx, dy);
效果如图2.1.1所示
图2.1.1 质点动画效果图
2.2 电影动画
电影动画和电影的制作有点相似,实际可以看出是一个先“拍”再“播”的过程,即捕捉将要构成动画帧的图像逐个存到一个大矩阵中,然后播放这个大矩阵的数据。
基本步骤: 1、调用moviein函数初始化内存,创建一个足够大的矩阵,用于存储构成每一帧图像的数据。 2、利用getframe抓取当前画面(即每帧图像),返回的数据用于构成动画矩阵。 3、调用movie函数按照指定的速度进行指定次数播放该电影动画。例如:movie(M, n)可以播放由矩阵M所定义的画面n次,默认只播放一次。 getframe与movie函数调用格式见表2.2.1及表2.2.2:getframe函数可以捕捉动画帧,并保存到矩阵中。
表2.2.1 getframe函数用法 调用格式 调用说明 f=getframe 从当前图形框中得到动画帧 f = getframe(h) 从图形句柄h中得到动画帧 f=getframe(h,rect) 从图形句柄h的指定区域rect中得到动画帧 当创建了一系列动画帧后,可利用movie函数播放这些动画帧。该函数的用法有:
表2.2.2 movie函数用法 调用格式 调用说明 movie(M) 将矩阵M中的动画帧播放一次 movie(M, n) 将矩阵M中的动画帧播放n次 movie(M,n,fps) 将矩阵M中的动画帧以每秒fps帧的速度播放n次 实例:旋转的山峰动画
clc; clear; % peaks是一个函数,其中有2个变量。由平移和放缩高斯分布函数获得。 % 参数为30,得到的X、Y、Z为30*30的矩阵。 [X, Y, Z] = peaks(30); % surf绘制三维曲面图 surf(X,Y,Z); axis([-3,3,-3,3,-10,10]); % 关闭所用坐标轴上的标记、格栅和单位标记。但保留由text和gtext设置的对象 axis off; shading interp; colormap(hot); M = moviein(20);% 建立一个20列的大矩阵 for i = 1:20 view(-37.5+24*(i-1),30);% 改变视点 M(i) = getframe;% 将图形保存到M矩阵 end movie(M,2);% 播放画面2次
运行结果如图2.2.1所示
图2.2.1 电影动画实例
2.3 程序动画
在MATLAB中把用于数据可视和界面制作的基本绘图要素称为句柄图形对象,每个图形对象有相应的属性值,例如线条Line对象就有颜色、位置等属性。可以改变图形对象的属性值,重绘图形对象,从而创建程序动画。其基本思路是:首先新建一个图形窗口,再循环内逐渐改变图形对象的相应属性值,并使用drawnow函数更新当前图形,整个循环就会表现出变化的动画效果。
实例代码如下
clear; clc; %% 新建图形窗口并设置初始属性 hFigure=figure('menubar','none','NumberTitle','off','position',... [800 800 360 360],'name','图片切换动画效果'); movegui(hFigure,'center');%设置居中 %设置坐标轴属性 hAxes=axes('Visible','off','units','normalized','position',[0 0 1 1]); %% 在图形窗口中显示图片 Im=imread('image.jpg'); hIm=imshow(Im); [x,y,z]=size(Im); %% 修改属性并重绘 for i=1:100 I=Im(1:x/100*i,1:y/100*i,:);%逐渐放大显示 set(hIm,'CData',I); drawnow; end
代码5-8行新建图形窗口并为窗口中的对象设置初始属性,可以理解为给后面显示图像提供一个自定义的环境。首先第5行figure函数用于Figure图形窗口的创建,括号中参数设置相应属性,其中'menubar','none'表示禁用菜单栏;‘NumberTitle’,‘off’表示图形标题中不显示图形编号;‘Position’,'[800 800 360 360]'表示设置图形窗口的位置与大小,格式为[左 底 宽 高];‘Name’,'图片切换动画效果',表示设置图形窗口的标题。
第7行设置图形窗口在居中位置。第9行axes函数用于Axes坐标对象的创建,即在当前图形窗口中新建一个坐标轴,括号里面参数设置上与figure格式相似,即设置坐标轴不可见、计量单位为常规、绘图区域的位置和大小设为[0 0 1 1]([左 底 宽 高])。
第12-13行为读入图片,并在上面设置的坐标中显示图片,hIm为image(图形)对象的句柄,可通过句柄对该对象进行操作。
第16-20行是在for循环中修改image(图形)对象的CData属性,并重绘图形从而实现动画的。具体的第18行中,set就是一个用于设置一般对象属性的函数,第一个参数hIm为图形句柄用于指定对哪个对象进行操作,这里就是image对象了;后面‘CData’,‘I’是指当前要显示的图像数据设置为矩阵I。整句就是指对hIm对象设置其要显示的图像这一属性为I。第19行drawnow就是将属性改变了的图形显示出来。
实现的效果如图2.3.1所示
图2.3.1 程序动画效果
3. 图片切换效果制作
经过前面动画制作原理的介绍,这节就正式说说开头那个效果的实现了,为了便于编程实现(电影动画方式需先存后播编程稍显繁琐)这里采用程序动画的制作方式。首先需要准备几张长方形图片,为了方便后面处理其大小尺寸应该一致,即几张图像有相同长宽,并与接下来编写的M文件放在同一文件夹下。新建一个M文件命名为imageswitch.m,我们后面的编程都在该文件下进行。
3.1 效果一实现
如图3.1.1所示,将长方形图片做一个简单划分(这里我的图片尺寸为1920*1200),以宽度的大小为边长在中间掏出一个正方形,就是图中两条蓝色线条分割的中间部分,那么两条线的位置就是(1920-1200)/2和1920-(1920-1200)/2也就是360,和1560,如此一来这张图片就分成了左右两个长条和中间正方形区域了。
图3.1.1 分割图片
现在一步步从头开始编写程序吧,首先实现的是第二幅图片的左边长条由顶部向下移动逐渐覆盖原图片的左边长条,同时右边的长条也逐渐被覆盖不过是由底部向上移动的。在程序中这一过程其实是一个图片矩阵中一部分元素逐渐被另一矩阵中元素所替换的过程。说白了图片的存储和处理都是以矩阵的形式,图3.1那张图片就是一个1920*1200*3的三维矩阵,左边长条的移动就是横坐标范围在1-360,纵坐标范围为1-1200的所有元素逐渐由第二张图数据矩阵的相同范围上的对应元素所赋值的过程了。我们看一段代码理解一下。
function imageswitch1() %需显示的图片文件名预存 S=char('BingWallpaper-2016-09-27.jpg',... 'BingWallpaper-2016-10-07.jpg'); Imagename=cellstr(S); %% 读入图片 I1=imread(Imagename{1});I2=imread(Imagename{2}); %% 转换存储格式为double I1=im2double(I1);I2=im2double(I2); %% [x,y,z]=size(I1); Im=I1; %% 创建图形窗口并设置图形对象初始属性 hFigure=figure('menubar','none','NumberTitle','off','position',... [1000 1000 720 450],'name','图片切换动画效果'); movegui(hFigure,'center'); axes('Visible','off','units','normalized','position',[0 0 1 1]); % 显示图片 hIm=imshow(Im); step=x/100;%渐变步长 Length=(y-x)/2; % 动画效果一 for i=step:step:x % 改变图像数据 Im(1:i,1:Length,:)=I2(x-i+1:x,1:Length,:); Im(x-i+1:x,y-Length+1:y,:)=I2(1:i,y-Length+1:y,:); set(hIm,'CData',Im);%设置image对象CData属性为Im drawnow ;%重绘当前图形窗口 end end
代码中第1-19行是新建图形窗口并对图形对象设置属性值为后面动画制作提供一个好的“环境”,在2.3节中已经详细介绍这里就不再赘述了。21-30行就是重点了,21行是设置一个赋值的范围跨度,值越大后面动画进行的速度就越快;22行的Length就是小长条的宽,为了方便后面用到;整个动画的实现在for循环中进行,第26行Im是将要显示的矩阵而后面的I2是下一张图片的数据矩阵,在第12行Im已经被赋值为第一张图片的数据矩阵I1了,现在要做的就是随着for循环的进行i的值逐渐增大长条逐渐被赋值了。22行语句如下
Im(1:i,1:Length,:)=I2(x-i+1:x,1:Length,:);
可以看到第二维和第三维的范围两边矩阵是相同的,都分别是1:Length、:,即第二维索引范围是1到Length(小长条的宽),第三维索引取全部范围(第三维可认为是对色彩的设定,“:”表示取索引全部范围,就可以认为是保留色彩了,实际还得理解下RGB图像的存储方式哦)。第一维范围为1到i,随i的增大越来越多的区域被I2中x-i+1到x范围的I2覆盖。同理第23行也是逐渐覆盖原有图像右边长条,所以这是第二维的范围应该是y-Length+1到y,而右边的长条下一张图片的那一部分是向下逐渐覆盖的,故第一维两个矩阵的索引范围与左边的相反。
第24行将image对象的CData属性设置为赋值后的Im,即显示的图像是新的Im。第25行用drawnow函数重绘图形窗口,就会显示新的一帧。最终以上代码运行的动画效果如图3.1.2所示
图3.1.2 长条移动演示
将中间正方形区域平均分成上下两部分,上部分区域由下一幅图片相应部分向右移动覆盖,下部分由下一幅图片相应部分向左移动覆盖,效果一的完整效果就是图3.1.3所示的
图3.1.3 效果一的完整效果
这只要在上面实现长条的代码23-24间加上以下两行代码其原理与长条移动相同,只不过这时的索引范围需要有所改变上层范围为1到x/2,即上半部分,第二维Im是从Length+1(正方形开始的地方)至Length+i(随i的增大逐渐覆盖这个正方形宽度范围)被I2中最右边部分开始的像素部分取代,而第二行正好覆盖的方向相反。
Im(1:x/2,Length+1:Length+i,:)=I2(1:x/2,y-Length-i+1:y-Length,:); Im(x/2+1:x,y-Length-i+1:y-Length,:)=I2(x/2+1:x,Length+1:Length+i,:);
效果一的完整代码如下,新建到imageswitch2.m文件中即可实现图3.1.3的效果
function imageswitch2() %需显示的图片文件名预存 S=char('BingWallpaper-2016-09-27.jpg',... 'BingWallpaper-2016-10-07.jpg'); Imagename=cellstr(S); %% 读入图片 I1=imread(Imagename{1});I2=imread(Imagename{2}); %% 转换存储格式为double I1=im2double(I1);I2=im2double(I2); %% [x,y,z]=size(I1); Im=I1; %% 创建图形窗口并设置图形对象初始属性 hFigure=figure('menubar','none','NumberTitle','off','position',... [1000 1000 720 450],'name','图片切换动画效果'); movegui(hFigure,'center'); axes('Visible','off','units','normalized','position',[0 0 1 1]); % 显示图片 hIm=imshow(Im); step=x/10;%渐变步长 Length=(y-x)/2; % 动画效果一 for i=step:step:x % 改变图像数据 Im(1:i,1:Length,:)=I2(x-i+1:x,1:Length,:); Im(x-i+1:x,y-Length+1:y,:)=I2(1:i,y-Length+1:y,:); Im(1:x/2,Length+1:Length+i,:)=I2(1:x/2,y-Length-i+1:y-Length,:); Im(x/2+1:x,y-Length-i+1:y-Length,:)=I2(x/2+1:x,Length+1:Length+i,:); set(hIm,'CData',Im);%设置image对象CData属性为Im drawnow ;%重绘当前图形窗口 end Im=I1; end
同样可以将覆盖的方向改变,如取与上面相反的覆盖方向就可以实现又一种切换效果了。
3.2 缩放效果制作
对于中间的正方形区域可以设计一个缩放的效果,如图3.2.1所示。
图3.2.1 缩放演示效果
这时对正方形赋值的代码如下
Im(x/2-i/2+1:x/2+i/2,y/2-i/2+1:y/2+i/2,:)=I2(x/2-i/2+1:x/2+i/2,y/2-i/2+1:y/2+i/2,:);
要实现缩小就需要正方形区域的索引范围以一定速度缩小,最终由下一张图片完全覆盖,实现图3.2.1效果的完整代码如下
function imageswitch3() %需显示的图片文件名预存 S=char('BingWallpaper-2016-10-13.jpg',... 'BingWallpaper-2016-10-14.jpg'); Imagename=cellstr(S); %% 读入图片 I1=imread(Imagename{1});I2=imread(Imagename{2}); %% 转换存储格式为double I1=im2double(I1);I2=im2double(I2); %% [x,y,z]=size(I1); Im=I1; %% 创建图形窗口并设置图形对象初始属性 hFigure=figure('menubar','none','NumberTitle','off','position',... [1000 1000 720 450],'name','图片切换动画效果'); movegui(hFigure,'center'); axes('Visible','off','units','normalized','position',[0 0 1 1]); % 显示图片 hIm=imshow(Im); step=x/10;%渐变步长 Length=(y-x)/2; % 动画效果一 while 1 for i=x:-step:step Im=I1; Im(x-i+1:x,1:Length,:)=I2(1:i,1:Length,:); Im(1:i,y-Length+1:y,:)=I2(x-i+1:x,y-Length+1:y,:); Im(x/2-i/2+1:x/2+i/2,y/2-i/2+1:y/2+i/2,:)=I2(x/2-i/2+1:x/2+i/2,y/2-i/2+1:y/2+i/2,:); set(hIm,'CData',Im);%设置image对象CData属性为Im drawnow ;%重绘当前图形窗口 end Im=I1; end end
同样可以设计一个从中间放大而覆盖图像的效果,这只需要改变上面代码中for中的赋值部分就可以了,至于具体如何修改大家只要参考第4节中的完整代码就行了,限于篇幅这里就不多说了。
3.3 将动画保存为GIF
MATLAB 制作gif动态图的基本思想就是,将一张张的静态图组合成一张能动的gif图片,并保存到相应的位置。 那么,要想制作一张动态图,首先要有若干个静态图,并且他们的索引值是连续的。将我们制作的动画保存下来其完整代码如下
function imageswitch4() %需显示的图片文件名预存 S=char('BingWallpaper-2016-10-13.jpg',... 'BingWallpaper-2016-10-14.jpg'); Imagename=cellstr(S); %% 读入图片 I1=imread(Imagename{1});I2=imread(Imagename{2}); %% 转换存储格式为double I1=im2double(I1);I2=im2double(I2); %% [x,y,z]=size(I1); Im=I1; %% 创建图形窗口并设置图形对象初始属性 hFigure=figure('menubar','none','NumberTitle','off','position',... [1000 1000 720 450],'name','图片切换动画效果'); movegui(hFigure,'center'); axes('Visible','off','units','normalized','position',[0 0 1 1]); % 显示图片 hIm=imshow(Im); step=x/10;%渐变步长 Length=(y-x)/2; % 动画效果一 jo=0; for i=x:-step:step Im=I1; Im(x-i+1:x,1:Length,:)=I2(1:i,1:Length,:); Im(1:i,y-Length+1:y,:)=I2(x-i+1:x,y-Length+1:y,:); Im(x/2-i/2+1:x/2+i/2,y/2-i/2+1:y/2+i/2,:)=I2(x/2-i/2+1:x/2+i/2,y/2-i/2+1:y/2+i/2,:); set(hIm,'CData',Im);%设置image对象CData属性为Im drawnow ;%重绘当前图形窗口 jo=jo+1; %依次输出图片 print(hFigure,'-dbmp',sprintf('%d',jo)) end %% 依次读取生成的所有图片 for j=1:jo %获取当前图片 A=imread(sprintf('%d.bmp',j)); [I,map]=rgb2ind(A,256); %生成gif,并保存 if(j==1) imwrite(I,map,'movefig.gif','DelayTime',0.1,'LoopCount',Inf) else imwrite(I,map,'movefig.gif','WriteMode','append','DelayTime',0.1) end end end
前面第1-33行代码与之前的代码一致,在第37行print(hFigure,'-dbmp',sprintf('%d',jo)) 中hFigure是当前图形窗口的图形句柄,指定输出当前窗口的图像,'-dbmp'指定输出文件格式,sprintf('%d',jo)是对bmp文件命名为jo。后面第41-51行的for循环是遍历刚刚生成的图片将其组合成gif文件,生成的gif文件如图3.2.2所示。
图3.2.2 movefig.gif
4. 完整代码
实现文中开头图中的效果的完整代码如下所示,在MATLAB中新建一个m文件,命名为imageswitch.m运行即可。注意将相应图片放在m文件相同文件夹下,图片的命名需与代码中一致(也可修改代码中文件名)免得出错。下面是本文所用到的图片文件,需要的可以选中复制下来用于测试程序,只是需要改下文件名与这里一致。
%作品:图片切换动画效果 %作者:吴限 %2018.3.14 function imageswitch() %需显示的图片文件名预存 S=char('BingWallpaper-2016-09-27.jpg',... 'BingWallpaper-2016-10-07.jpg',... 'BingWallpaper-2016-10-13.jpg',... 'BingWallpaper-2016-10-14.jpg',... 'BingWallpaper-2016-12-26.jpg'); Imagename=cellstr(S); %% 读入图片 I1=imread(Imagename{1});I2=imread(Imagename{2}); I3=imread(Imagename{3});I4=imread(Imagename{4}); I5=imread(Imagename{5}); %% 转换存储格式为double I1=im2double(I1);I2=im2double(I2);I3=im2double(I3); I4=im2double(I4);I5=im2double(I5); %% [x,y,z]=size(I1); Im=I1; %% 创建图形窗口并设置图形对象初始属性 hFigure=figure('menubar','none','NumberTitle','off','position',... [1000 1000 720 450],'name','图片切换动画效果'); movegui(hFigure,'center'); axes('Visible','off','units','normalized','position',[0 0 1 1]); % 显示图片 hIm=imshow(Im); step=x/10;%渐变步长 Length=(y-x)/2; while 1 % 动画效果一 for i=step:step:x % 改变图像数据 Im(1:i,1:Length,:)=I2(x-i+1:x,1:Length,:); Im(x-i+1:x,y-Length+1:y,:)=I2(1:i,y-Length+1:y,:); Im(1:x/2,Length+1:Length+i,:)=I2(1:x/2,y-Length-i+1:y-Length,:); Im(x/2+1:x,y-Length-i+1:y-Length,:)=I2(x/2+1:x,Length+1:Length+i,:); set(hIm,'CData',Im);%设置image对象CData属性为Im drawnow ;%重绘当前图形窗口 end % 动画效果二 Im=I2; for i=x:-step:step Im=I4; Im(x-i+1:x,1:Length,:)=I3(1:i,1:Length,:); Im(1:i,y-Length+1:y,:)=I3(x-i+1:x,y-Length+1:y,:); Im(x/2-i/2+1:x/2+i/2,y/2-i/2+1:y/2+i/2,:)=I3(x/2-i/2+1:x/2+i/2,y/2-i/2+1:y/2+i/2,:); set(hIm,'CData',Im);%设置image对象CData属性为Im drawnow ;%重绘当前图形窗口 end %动画效果三 Im=I3; for i=x:-step:step Im=I1; Im(1:i,1:Length,:)=I4(x-i+1:x,1:Length,:); Im(x-i+1:x,y-Length+1:y,:)=I4(1:i,y-Length+1:y,:); Im(1:x/2,Length+1:Length+i,:)=I4(1:x/2,y-Length-i+1:y-Length,:); Im(x/2+1:x,y-Length-i+1:y-Length,:)=I4(x/2+1:x,Length+1:Length+i,:); set(hIm,'CData',Im);%设置image对象CData属性为Im drawnow ;%重绘当前图形窗口 end %动画效果四 Im=I4; for i=1:step:x Im(x-i+1:x,1:Length,:)=I5(1:i,1:Length,:); Im(1:i,y-Length+1:y,:)=I5(x-i+1:x,y-Length+1:y,:); Im(x/2-i/2+1:x/2+i/2,y/2-i/2+1:y/2+i/2,:)=I5(x/2-i/2+1:x/2+i/2,y/2-i/2+1:y/2+i/2,:); set(hIm,'CData',Im);%设置image对象CData属性为Im drawnow ;%重绘当前图形窗口 end Im=I5; end end
用到的图片文件:
BingWallpaper-2016-09-27.jpg
BingWallpaper-2016-10-07.jpg
BingWallpaper-2016-10-13.jpg
BingWallpaper-2016-10-14.jpg
BingWallpaper-2016-12-26.jpg
本文中所有代码的完整m文件还有图片文件已经上传,代码经调试通过
下载链接:https://download.csdn.net/download/qq_32892383/10288793
有需要的朋友在评论区留言,可以将文件发送至你的邮箱。
【公众号获取】
本人微信公众号已创建,扫描以下二维码并关注公众号“AI技术研究与分享”,后台回复“IS20180315”即可获取全部资源文件。5. 结束语
这就是利用MATLAB进行图片切换动画的全部内容了,还有很多炫丽的动画效果可以创造,将动画效果用到PPT演示和GUI设计等方面定能增色不少。本博文介绍的方法在多次修改之下,使其程序更加严谨。由于编者能力有限,代码即使经过了多次校对,也难免会有疏漏之处。希望您能热心指出其中的错误,以便下次修改时能以一个更完美更严谨的样子,呈现在大家面前。同时如果有更好的实现方法也请您不吝赐教。
-
android 各种加载动画效果
2014-10-16 15:20:28android 各种加载动画效果 现在免费分享给大家 希望大家可以喜欢! -
Windows界面编程第六篇 动画启动效果(动画效果显示及隐藏窗口)
2013-03-11 10:02:08《Windows界面编程第六篇 动画启动效果(动画效果显示及隐藏窗口)》 http://blog.csdn.net/morewindows/article/details/8656068 配套程序。 能动画方式显示和隐藏窗口和对话框程序,能用于Win32和MFC程序中。 -
React动画效果
2017-09-13 14:21:06React动画效果平常我们使用的动画效果大多和jQuery.animate()相关,但是React就是被用来取代jQuery的。所以在动画实现的选择上我们常常选择CSS3的原生支持来实现。但是,CSS3的动画过程是:“在什么时间范围内,以...React动画效果
平常我们使用的动画效果大多和
jQuery.animate()
相关,但是React
就是被用来取代jQuery
的。所以在动画实现的选择上我们常常选择CSS3
的原生支持来实现。但是,
CSS3
的动画过程是:“在什么时间范围内,以什么样的运动节奏完成动画”
。在用原生CSS3
实现动画时,不好调试,因为动画过程可能一闪而过,并且在React
中,样式的渲染必须等到组件已经挂载完成后,那么在组件加载和卸载的过程中我们是无法实现动画的。所以
React
提供了一个叫ReactCSSTransitionGroup
的组件辅助实现动画功能。ReactCSSTransitionGroup组件安装
npm install --save react-addons-css-transition-group
组件规则
组件属性
transitionAppear
:false | true , 首次装载时使用。transitionEnter
:false | true, 组件挂载时使用,不包含首次挂载。transitionLeave
:false | true, 组件卸载时使用。transitionName
:String, 用户自定义样式。transitionEnterTimeout
:Number, 组件挂载时动画过度时间,单位ms。transitionLeaveTimeout
:Number, 组件卸载时动画过度时间,单位ms。enter:挂载,leave:卸载,appear:首次挂载。这3种状态分别对应6种样式。
分别为:
[name]-enter:组件挂载前的样式。
[name]-enter-active:组件挂载完成后的样式。
[name]-leave:组件卸载前的样式。
[name]-leave-active:组件卸载完成后的样式。
[name]-appear:组件首次挂载前的样式。
[name]-appear-active:组件首次挂载完成后的样式。
示例
import React from 'react' import ReactCSSTransitionGroup from 'react-addons-css-transition-group' import "../index.css" export default class App extends React.Component { render() { return ( <ReactCSSTransitionGroup transitionName='example' transitionAppear={true} transitionAppearTimeout={500} > <div className="css-test"> Hello React CSS Transition Group! </div> </ReactCSSTransitionGroup> ) } }
body { margin: 0; padding: 0; font-family: sans-serif; } .css-test{ width: 300px; height: 300px; background-color: #b1a1a1; text-align: center; line-height: 300px; margin: 100px auto; } .example-enter { opacity: 0.01; } .example-enter.example-enter-active { opacity: 1; transition: opacity 500ms ease-in; } .example-leave { opacity: 1; } .example-leave.example-leave-active { opacity: 0.01; transition: opacity 300ms ease-in; } .example-appear { opacity: 0.01; } .example-appear.example-appear-active { opacity: 1; transition: opacity .5s ease-in; }
上面代码的效果:页面刷新时,组件会呈现淡入效果。
ReactCSSTransitionGroup并非脱了css3原生样式,反而它非常依赖css3的动画样式,只是它对组件的生命周期做了进一步处理,使动画能存在于整个组件的生命周期。
-
pygame用blit()实现动画效果
2018-08-27 19:49:55然后让窗口在一个画着很多帧图像的图上面移动,当我们透过这个窗口去观察这幅图的时候,只要窗口沿着一个方向去运动,那么就会产生动画效果。 今天我介绍的是通过块传输的方法去实现。 surfa...pygame的的实现动画的方法有很多,但是都是围绕着表面进行的,也就是说实现动画的方式不同,但是本质其实都是对表面的不同处理方式而已。
原理其实很简单,有点像我们做地铁的时候隧道里的广告一样。我们设置一个窗口。然后让窗口在一个画着很多帧图像的图上面移动,当我们透过这个窗口去观察这幅图的时候,只要窗口沿着一个方向去运动,那么就会产生动画效果。
今天我介绍的是通过块传输的方法去实现。
surface.blit(image,(x,y),rect) 在这里surface.blit()这个方法应该大家都很熟悉了,我们就是利用第三个参数,也就是绘制区域的变化实现的动画.我们将图像的一部分绘制出来。如果加上一个简单的循环,让绘制区域的位置发生变化。那么就可以实现动画效果啦。
这个方法实现的精灵动画很简单.
完整代码如下:
PS:非常抱歉,因为这段代码是几年前我给我孩子写的一个小游戏里的其中一段,我没有测试就直接剪切过来了,后来自己一直也没注意过评论,所以一直没发现这段代码无法正常运行。 现在对代码做了更新,直接复制粘贴就可以运行了,注意在第5行参数那里把图片路径和文件名填写正确。 2020-9-4import sys,pygame pygame.init() #初始化pygame类 screen = pygame.display.set_mode((600,800)) #设置窗口大小 pygame.display.set_caption('动画测试') #设置窗口标题 image = pygame.image.load('512x126.png') #加载图片,这里一定要正确填写图片路径,如果和py文件在同目录下则直接写文件名(带上文件类型) tick = pygame.time.Clock() frameNumber = 6 #设置帧数,示例图片有6帧 frameRect = image.get_rect()#获取全图的框体数据,以此计算单帧框体 frameRect.width //= frameNumber #获取每一帧的边框数据,实例图片之只有一行,所以单帧高度和整体图片高度相等 fps = 10 #设置刷新率,数字越大刷新率越高,但因为示例图片只有6帧所以建议设低一点 否则闪的太凶。 fcclock = pygame.time.Clock() n = 0 #这算是一个magic number吧,是为了计算框体位置所引用的一个计算变量,实在懒得想名字了。 while True: for event in pygame.event.get(): #事件检测,如果点击右上角X,则程序退出,没有这个循环的话,窗口可能会在打开时闪退。 if event.type == pygame.QUIT: sys.exit() if n < frameNumber: frameRect.x = frameRect.width * n #这里通过移动单帧矿体的x轴坐标实现单帧框体位移 n += 1 else: n = 0 screen.fill((255,255,255))#设置背景为白色 screen.blit(image, (0,0),frameRect)#这里给了3个实参,分别是图像,绘制的位置,绘制的截面框 fcclock.tick(fps) #设置图像刷新率,如果刷新率太高,图像闪的太厉害 pygame.display.flip() #刷新窗口
其实还有一种方式实现动画,就是surface.subsurface()可以参考我的博客。https://blog.csdn.net/zzwlyj/article/details/82290004#comments
-
CSS动画效果
2019-05-28 20:21:11继上篇文章之后,先对之前学的内容进行复习一下 01、过渡 Document 02、体会动画 03体会动画 03、心跳 04心跳 05、sea大海 Document 06、三列等宽...继上篇文章之后,先对之前学的内容进行复习一下
01、过渡<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> div { width: 100px; height: 100px; background-color: pink; transition: all .3s; /* 过渡写再本身是 谁做动画写再谁身上 s ms*/ } div:hover { /*background: green no-repeat url();*/ background: green ; /*transform: translate(100px, 100px); 只有 x y 默认为0 transform: scale(1.3); 只有 x y 默认 等比例缩放 */ transform: translate(100px, 100px) scale(0.3) rotate(45deg); /*顺序有关系 先 移动后缩放*/ } </style> </head> <body> <div> </div> </body> </html>
02、体会动画<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>03体会动画</title> <style> div{ width: 100px; height: 100px; background-color: pink; position: absolute; left: 0; /*调用动画 */ /* animation:动画名称 花费时间 运动曲线 何时开始 播放次数 是否反方向 */ animation: move 2s ease 0s infinite alternate; -webkit-animation: move 2s ease 0s infinite alternate; } /* 声明动画 关键帧 @keyframes 动画名称{} */ @keyframes move{ from{ left: 0; background-color: pink; } to{ left: 1000px; background-color: yellow; } } @-webkit-keyframes move{ from{ left: 0; background-color: yellow; } to{ left: 1000px; background-color: yellow; } } @-ms-keyframes move{ from{ left: 0; background-color: pink; } to{ left: 1000px; background-color: yellow; } } </style> </head> <body> <div></div> </body> </html>
03、心跳<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>04心跳</title> <style> img{ width: 400px; height: auto; /* animation:动画名称 花费时间 运动曲线 何时开始 播放次数 是否反方向 */ animation: heart 0.5s infinite; } div{ width: 100px; height: 100px; background-color: pink; margin: 100px auto; animation: heart 0.5s infinite;//一个叫heart的动画 每隔0.5s执行动画 无限次 } @keyframes heart{ 0%{ transform: scale(1); } 50%{ transform: scale(1.1); } 100%{ transform: scale(1); } } </style> </head> <body> <img src="../images/1.jpg" height="744" width="800" alt="loading" /> <div></div> </body> </html>
05、sea大海<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> * { margin: 0; padding: 0; } html, body { width: 100%; height: 100%; background-color: #0EA9B1; overflow: hidden; } img { width: 100%; height: auto; position: absolute; bottom: 0; left: 0; } img:first-child { animation: move 2s linear infinite; } img:last-child { animation: move 2s linear 0.3s infinite; } .sun { width: 100px; height: 100px; /*background-color: pink;*/ margin: 100px; position: relative; } .sun::before, .sun::after { content: ""; position: absolute; top: 50%; left: 50%; width: 50px; height: 50px; transform: translate(-50%, -50%); background: rgba(255, 255, 255, 0.8); border-radius: 50%; animation: sun 2s infinite; } .sun::after { width: 80px; height: 80px; background: rgba(255, 255, 255, 0.6); animation: sun 3s infinite; } @keyframes move { 0% { bottom: 0; } 50% { bottom: -50px; } 100% { bottom: 0; } } @keyframes sun { 0% { transform:translate(-50%, -50%) scale(1); box-shadow: 0px 0px 5px rgba(255,255,255,0.7); } 50% { transform:translate(-50%, -50%) scale(1.1); box-shadow: 0px 0px 30px rgba(255,255,255,0.7); } 100% { transform:translate(-50%, -50%) scale(1); box-shadow: 0px 0px 5px rgba(255,255,255,0.7); } } </style> </head> <body> <div class="sun"></div> <img src="../images/1.png" height="211" width="2000" alt="loading"> <img src="../images/2.png" height="211" width="2000" alt="loading"> </body> </html>
06、三列等宽布局<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>07三列等宽布局</title> <style> section{ width: 80%; height: 150px; margin: 100px auto; } section div{ width: 30%; height: 100%; float: left; margin: 0 10px; } section div:nth-child(1){ background-color: pink; } section div:nth-child(2){ background-color: purple; } section div:nth-child(3){ background-color: blue; } </style> </head> <body> <section> <div>1</div> <div>2</div> <div>3</div> </section> </body> </html>
07、css3伸缩布局<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>css3伸缩布局</title> <style> section{ width: 80%; height: 150px; margin: 100px auto; /* 父亲添加 伸缩布局 */ display: flex; } section div{ height: 100%; flex: 1;//孩子的份数 } section div:nth-child(1){ background-color: pink; flex: 2; } section div:nth-child(2){ background-color: purple; margin: 0 10px; } section div:nth-child(3){ background-color: blue; flex: 3; } </style> </head> <body> <section> <div>1</div> <div>2</div> <div>3</div> </section> </body> </html>
08、css3伸缩布局固定<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>css3伸缩布局固定宽度</title> <style> section{ width: 80%; height: 150px; margin: 100px auto; /* 父亲添加 伸缩布局 */ display: flex; min-width: 500px;//section最小的宽度就是500px } section div{ height: 100%; /* flex:1 孩子的份数 */ } section div:nth-child(1){ background-color: pink; width: 200px; } section div:nth-child(2){ background-color: purple; margin: 0 10px; flex: 2; } section div:nth-child(3){ background-color: blue; flex: 1; } </style> </head> <body> <section> <div>1</div> <div>2</div> <div>3</div> </section> </body> </html>
09、css3伸缩布局垂直分布<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>css3伸缩布局垂直分布</title> <style> section{ width: 80%; height: 150px; margin: 100px auto; /* 父亲添加 伸缩布局 */ display: flex; min-width: 500px; //section最小的宽度就是500px flex-direction: column;//垂直分布 } section div{ flex: 1;//孩子的份数 } section div:nth-child(1){ background-color: pink; } section div:nth-child(2){ background-color: purple; } section div:nth-child(3){ background-color: blue; } </style> </head> <body> <section> <div>1</div> <div>2</div> <div>3</div> </section> </body> </html>
10、携程网<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>11携程网</title> <style> * { margin: 0; padding: 0; box-sizing: border-box; } html, body { min-width: 320px; max-width: 540px; margin: 0 auto; font: normal 14px/1.5 Tahoma,"Lucida Grande",Verdana,"Microsoft Yahei",STXihei,hei; } header { height: 108px; } header img { height: 100%; width: auto; } nav { border: 1px solid #ccc; padding: 4px; } nav a { text-decoration: none; color: #fff; text-shadow: 0 2px 1px rgba(0,0,0,.2); /*text-shadow:水平位置 垂直位置 模糊距离 阴影颜色;*/ } .row { height: 90px; display: flex; /*伸缩布局*/ border-radius: 5px; overflow: hidden; margin-bottom: 5px; } .row div { height: 100%; flex: 1; background-color: #FF697A; border-right: 1px solid #fff; } .row div:nth-child(3) { border-right: 0; } .row div a { display: block; width: 100%; height: 100%; } .row33 { display: flex; flex-direction: column; } .row33 a { flex: 1; text-align: center; line-height: 45px; } .row33 a:first-child { border-bottom: 1px solid #fff; } .row em { display: block; height: 45px; text-align: center; line-height: 45px; font-style: normal; } .row i { display: block; width: 43px; height: 43px; margin: -5px auto 0; background: url(../images/ctrip.png) no-repeat 0 -127px; -webkit-background-size: 104px; /* 前缀 */ -moz-background-size: 104px; /* 前缀 火狐 */ -ms-background-size: 104px; /* 前缀 ie */ -o-background-size: 104px; /* 前缀 ie */ background-size: 104px; } .row .icon-flight { background-position: 0 -288px; } </style> </head> <body> <header> <img src="../images/banner.jpg" height="307" width="1536" alt=""> </header> <nav> <div class="row"> <div> <a href="#"> <em>酒店</em> <i></i> </a> </div> <div class="row33"> <a href="#">海外酒店</a> <a href="#">特价酒店</a> </div> <div class="row33"> <a href="#">团购</a> <a href="#">同福客栈</a> </div> </div> <div class="row"> <div> <a href="#"> <em>酒店</em> <i class="icon-flight"></i> </a> </div> <div class="row33"> <a href="#">海外酒店</a> <a href="#">特价酒店</a> </div> <div class="row33"> <a href="#">团购</a> <a href="#">同福客栈</a> </div> </div> <div class="row"> <div> <a href="#"> <em>酒店</em> <i></i> </a> </div> <div class="row33"> <a href="#">海外酒店</a> <a href="#">特价酒店</a> </div> <div class="row33"> <a href="#">团购</a> <a href="#">同福客栈</a> </div> </div> <div class="row"> <div class="row33"> <a href="#">海外酒店</a> <a href="#">特价酒店</a> </div> <div class="row33"> <a href="#">海外酒店</a> <a href="#">特价酒店</a> </div> <div class="row33"> <a href="#">团购</a> <a href="#">同福客栈</a> </div> </div> </nav> </body> </html>
11、背景缩放<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>12背景缩放</title> <style> div{ width: 400px; height: 400px; background: url(../images/x.jpg) no-repeat; /* 颜色 图片 平铺 位置 滚动 */ border: 1px solid red; /* background-size: w h 规定背景图像的尺寸; */ /* background-size:100px 100px; */ /* background-size:100px; 如果只有一个值 后面一个值默认为auto 等比例缩放 */ /* background-size:cover; */ background-size: contain; } </style> </head> <body> <div></div> </body> </html>
12、背景渐变<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>13背景渐变</title> <style> div{ width: 300px; height: 100px; /* background:-webkit-linear-gradient(渐变的起始位置,颜色位置,颜色位置) */ background: -webkit-linear-gradient(top,red 0%,green 50%,blue 100%); } </style> </head> <body> <div></div> </body> </html>
13、多背景<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>14多背景</title> <style> div{ border: 1px solid #000; width: 600px; height: 600px; background: url(../images/2.jpg) no-repeat top left,url(../images/3.jpg) no-repeat bottom right; } </style> </head> <body> <div></div> </body> </html>
14、泡泡<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>15泡泡</title> <style> div{ width: 300px; height: 80px; border-radius: 20px; background:url(../images/paopao.png) no-repeat top left,url(../images/paopao.png) no-repeat right bottom; background-color: blue; transition: all 3s; } div:hover{ background-position: right bottom,top left; } </style> </head> <body> <div></div> </body> </html>
15、透明度<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>16透明度</title> <style> div{ width: 100px ; height: 100px; background-color: red; /* background:rgba(255,0,0,.2) 盒子的背景透明*/ opacity: 0.2;//盒子半透明 /* filter:alpha(opacity=20) ie 6写法*/ } </style> </head> <body> <div></div> <p>12312312</p> </body> </html>
16、rotateX<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>17rotateX</title> <style> img{ transition: all 2s; } img:hover{ transform: rotateX(360deg); } </style> </head> <body> <img src="../images/x.jpg" height="226" width="300" alt="loading" /> </body> </html>
17、rotateY<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>18rotateY</title> <style> body{ perspective: 500px; } img{ transition: all 2s; } img:hover{ transform: rotateY(360deg); } </style> </head> <body> <img src="../images/1498446043198.png" alt="loading" /> </body> </html>
18、两面翻转的盒子<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>18rotateY</title> <style> body{ perspective: 500px; } img{ transition: all 2s; } img:hover{ transform: rotateY(360deg); } </style> </head> <body> <img src="../images/1498446043198.png" alt="loading" /> </body> </html>
好用的话,关注一下我的公众号支持一下吧
-
Android 炫酷动画效果之属性动画 XML实现效果
2016-06-22 10:39:46安卓动画效果之属性动画系列以XML形式展现: 一.Activity界面跳转的动画 相关动画实现链接 一个不错的学习小项目https://github.com/kaku2015/ColorfulNews 代码中实现各种动画效果 1.移动动画跳转界面效果 ... -
WPF动画效果
2017-07-28 10:42:04以下是常用的几种简单动画效果,首先需要添加引用:using System.Windows.Media.Animation; 1、WPF位置动画(.cs代码): ThicknessAnimation marginAnimation = new ThicknessAnimation(); marginAnima -
网页动画效果
2017-04-28 09:47:12我想用网页直接做一个动画效果,不使用其他任何的工具,直接用记事本,然后用html,css和javascript之间的关系制作一个ppt放映时的动画效果,该效果是关于介绍沈阳师范大学软件学院学生会文艺部的。因为包含有... -
模仿蚂蚁森林动画效果
2019-01-09 15:00:50WaterView 项目地址:93Laer/WaterView 简介:模仿蚂蚁森林动画效果 更多:作者 提 Bug 标签: 模仿蚂蚁森林动画效果 -
Qt之动画效果
2017-12-05 09:29:11Qt自带的动画框架用来做简单的控件动画效果是比较简单易用的,像是对控件的位移、缩放、不透明度这些来做动画效果。 -
Android可拖拽的GridView,item交换动画效果
2014-05-06 13:19:56Android 可拖拽的GridView,item的实时交互,已经具有交换动画效果,项目详情http://blog.csdn.net/xiaanming/article/details/17718579 -
动画效果(一)-渐变动画
2016-06-27 14:11:49安卓系统的界面动画效果丰富,最常用到到就是渐变动画。本文将详细的介绍如何定义和使用渐变动画。 -
js动画效果 - 动画曲线
2017-03-28 17:38:451 参考 常见的动画都是速率相同的平滑效果,而有些动画在变动过程中速率不同,比如有些网站的返回顶部的动画效果会经过慢-快-慢的效果,这就设计到数学模型了,有一片参考文章:...这里讲解了tween算法代码。... -
常见JS动画效果
2017-09-27 14:06:15人们浏览网页时,若一个网页动画效果丰富炫酷,性能良好,体验度良好,自然会受到吸引去打来浏览。吸引用户,自然少不了网页的布局优美、色彩搭配的恰当,更重要的是其中吸引人的炫酷动画效果。 -
图片加载动画效果
2019-03-03 18:01:48图片选中的两种方法 开发工具与关键技术:DW CSS3旋转动画 作者:周欢 撰写时间:2019/3/3 纯图片排版美观还是动态的图片排版美观?...使用CSS3动画可以做出有意思的动画效果图,看一个小页面动起来的感觉很不... -
Android动画效果
2013-08-04 22:51:24第9章 Android动画效果 Android系统提供了两种实现动画的方式,一种是补间动画(Tween Animation),另一种是帧动画(Frame Animation)。补间动画可以实现View组件的移动、放大、缩小以及渐变等效果,帧动画则... -
vue页面跳转添加动画效果,实现页面跳转时左右平推的动画效果
2019-06-17 14:37:37多读多写多记录,多学多练多思考。... vue项目,为页面跳转添加动画效果 app.vue文件 <template> <div id="app"> <transition :name="transitionName"> <router-view>... -
Android动画开发——Animation动画效果
2013-09-11 14:18:12动画类型 Android的animation由四种类型组成 XML中 alpha 渐变透明度动画效果 scale 渐变尺寸伸缩动画效果 translate 画面转换位置移动动画效果 ...画面转移旋转动画效果 ...渐变透明度动画效果 -
Flutter AnimatedSwitcher 实现的滑动切换数字动画效果
2020-11-17 18:42:34Flutter AnimatedSwitcher 实现的滑动切换数字动画效果 -
android动画效果
2012-09-03 11:46:33本文主要研究Android中的三种动画,第一种是单个View的各种动画效果,第二种是两个Activity切换时的动画效果,第三种是类似于Gif的Frame By Frame动画效果,其中View的各种动画包括在xml文件中定义和代码中定义两... -
Android 动画效果怎么样叠加效果
2014-11-07 09:18:03我想实现的是,一个控件上面同事拥有两种或者两种以上的动画效果。比如说我给一个ImageView设置了一个移动的动画效果,但是我还想让这个控件在移动的同时进行旋转。这个该怎么做?跪求懂得大神指点 -
Android 卡片翻转动画效果
2017-11-18 20:48:22Android 卡片翻转动画效果 前言 前端时间开发一款应用APP,里面展示的内容需要用到卡片元素,卡片的正面显示主要信息,卡片的背面显示详细信息,单击卡片实现翻转动画的效果。 在这里我给出了两个卡片翻转动画效果... -
Android 实现人脸识别检测时的扫描动画效果(二维码扫描动画效果同理)
2018-12-13 12:56:58App现在二维码扫描、人脸扫描的场景越来越多,扫描的动画效果实则就是平移动画:TranslateAnimation 现在我呢用TranslateAnimation实现一个人脸扫描的效果,上下来回滑动(二维码只要替换一下BG即可): (超过5M的... -
Animation.css动画效果属性
2020-01-06 17:17:24Animation.css动画效果属性安装使用写法规则animation.css支持的动画种类支持延时效果(delay效果延时执行)和加速(speed效果执行所花费的时间)使用示例 安装 npm install animate.css --save 或者 yarn add ... -
好看的android动画效果
2017-03-24 16:41:28这段时间看到一些比较好看的android动画效果,下面我就给大家一些我比较喜欢的动画效果,并附上源码希望对你们有用处。 1.很简单却很酷的粒子破碎效果 介绍: 实现思路 1.新建一个 Bean ... -
android炫酷的动画效果
2018-07-06 13:51:50这段时间看到一些比较好看的android动画效果,下面我就给大家一些我比较喜欢的动画效果,并附上源码希望对你们有用处。1.很简单却很酷的粒子破碎效果介绍: 实现思路1.新建一个 Bean Particle,表示一个粒子对象;... -
常见CSS点赞动画效果
2020-04-22 11:15:17CSS3实现动画效果 用法 首先先定义一个动画样式 然后定义一个类名 把定义的动画赋值上去 需要的时候可以给节点添加类名 注意 : 以上是针对,对动画有基础的同学,如果没有基础,也不用担心哦~ 可以参考菜鸟教程的... -
Nuxt的路由动画效果
2018-08-28 11:56:44路由的动画效果,也叫作页面的更换效果。Nuxt.js提动两种方法为路由提动动画效果,一种是全局的,一种是针对单独页面制作。 全局路由动画 全局动画默认使用page进行设置,例如现在我们为每个页面都设置一个进入和...