《交互炸了》或许是一系列高端特效教程, 文中会介绍一些比较炫酷的特效,以及实现的思路。特效实现本身也许不会有太大的难度。难点在于实现的思路。一旦思路被打开,特效将很简单实现。

效果项目地址: https://github.com/githubwing/WowSplash

本期是第三期,第二期做的比较草率,好像并不太符合“交互炸了”这一主题,所以以后我会保证质量,而不是为了跟进数量凑数。这次给大家分享的效果是一个闪屏页的效果,效果如下:

有没有眼前一亮?现在许多炫酷的闪屏页或者引导页喜欢用视频来做,但是我偏不,原因有两个:

1.视频会增加App体积,为了这一个闪屏页,多增加用户下载流量,这是很恶心的一件事情。2.第二段云扩散融合效果,视频实现起来比较棘手。

动效制作思路发散

前面一篇跟大家分享了一写关于动画的小技巧。动画这种东西跟魔术一样,只要用户看的开心,怎么实现无所谓,所以做一些障眼法来取悦用户是没有问题的。这里的障眼法大概有如下几点:

1.View放大不是真正的放大。

2.View平移之后,可能悬浮在顶部的已经换成了一个一模一样的双胞胎View。

3.比较特殊的如上面的效果,扩散并不是View自己被扩散。

所以在做动效的时候,应该从一个魔术师的角度去考虑,而不能从用户的角度来考虑,做到思维的发散。这里可以去看看一些魔术揭秘教程~做到看起来很炫酷,原理很简单,基本上动效的思路就有啦。

WowSplash实现思路

我们先把特效分为两段,一段为描边动画。另一段为云雾扩散动画。首先来研究第一段。

第一阶段

第一段其实很简单,大部分小伙伴一眼就可以看出来,这就是SVG结合Path实现的动画。恩,对~你说的没错,网上有很多关于这种动画的实现,这里直接把需要的东西给到大家~

首先,你需要一张SVG图片,怎么获得呢,美工会配合我吗? 想多了,完全不需要美工大大帮忙~我们可以自己动手来。

首先需要用到一个神器: Vector Magic 他可以帮我们把普通图片转换为SVG图片。这里我就找来了一张铁塔的简笔画~ 转换之后,就可以得到SVG文件了~

其次,需要用到一个工具类,用于把SVG转换成Path.这里我直接拿了GAStudio哥的一个工具类:SvgPathParser 接下来,我们把拿到的SVG保存在String.xml文件中待用~

接下来使用PathMeasure 来进行SVG转换后Path的绘制,具体的细节,请看源码~这里不过多阐述。

 float stop = mLength * mAnimatorValue;mTowerPathMeasure.getSegment(0, stop, mTowerDst, true);canvas.drawPath(mTowerDst, mPaint);

铁塔完毕后,有点单调~ 我们来给他绘制一些云彩~ 每个云彩都是一个Path,所以画云彩只是绘制一些Path.

  private void drawCould(Canvas canvas) {for (int i = 0; i < mCouldPaths.length; i++) {setupCouldPath(mCouldPaths[i], i);canvas.drawPath(mCouldPaths[i], mPaint);}}

最后,加上动画~ 让他不生硬。最后暴漏一个方法,在进入Activity的时候执行,第一个阶段就完成啦~

  public void startAnimate() {restore();//start tower animategetTowerValueAnimator().start();//start could animatefor (int i = 0; i < mCouldPaths.length; i++) {final ValueAnimator couldAnimator = getCouldValueAnimator(i);postDelayed(new Runnable() {@Override public void run() {couldAnimator.start();}}, mDuration / 2);}getTitleAnimate().start();}

第二阶段

第二阶段看起来比较炫,其实也是比较简单的,扩散不好搞,可以换一个思路嘛。所以这里我就想到使用Xfermode,没错,你看到发散的云,其实又是另一张图片:

哈哈哈哈,这张图片一贴出来,你是不是想笑。原来看起来很炫的效果,真实这么搞笑。

好的,有了思路就很好继续了。我只需要让两个图片使用Xfermode搞基一番,并且在过程中让这个View逐渐透明,遮罩图片逐渐放大即可。

当然,有了思路变成很简单,其实还是有些坑的,说说遇到的坑。

关于Xfermode小伙伴们用到过的可能了解,他有坑,非常大的坑。。经常发现与Demo图出不来一样的效果。所以我专门总结了一篇博客如下:PorterDuffXferMode不正确的真正原因,感兴趣的可以看下。这里再来重复下Xfermode坑如何避免。

最终大总结,如果想让PorterDuffXferMode按照预期Demo(或者效果图)的效果图像实现,必须满足以下条件:

1、关闭硬件加速。(实际为开启硬离屏缓存)

2、两个bitmap大小尽量一样。

3、背景色为透明色。

4、如果两个bitmap位置不完全一样,可能也是预期效果,只不过你看到的效果和你自己脑补的预期效果不一致。

所以,为了避免这些坑,我把View分为了两个,第一阶段是一个View,第二阶段是一个View。当第一段View执行完之后,把该View截屏,转换为bitmap交给第二个View。同时第一个View设置gone来避免过度绘制,第二个View绘制的实际上是两个bitmap,并且开启硬离屏缓存来实现Xfermode的正确效果。

//解决硬件加速的bug
setLayerType(View.LAYER_TYPE_HARDWARE, null);
//将第一个View的bitmap交给第二个View
mWowView.startAnimate(wowSplashView.getDrawingCache());

最后,在使用动画让第二个View从0扩大到数倍,同时改变透明度就达到我们想要的效果了。

好啦,本期《交互炸了》到此就结束了,最后附上项目地址,如果你觉得不错,欢迎star,关注我可以获得最新动态哦。

https://github.com/githubwing/WowSplash

这交互炸了(三):闪屏页是像云一样消失的相关推荐

  1. 这交互炸了(三) :不看后悔!你一定没见过这样的闪屏

    <交互炸了>或许是一系列高端特效教程, 文中会介绍一些比较炫酷的特效,以及实现的思路.特效实现本身也许不会有太大的难度.难点在于实现的思路.一旦思路被打开,特效将很简单实现. 效果项目地址 ...

  2. android 闪屏页处理_Android应用闪屏页延迟跳转的三种写法

    闪屏页也称之为欢迎页.在打开一个App时,我们第一眼看到的往往是一个闪屏页面,之所以叫闪屏页,是因为它出现之后会短暂地停留几秒钟再跳转到其他页面.闪屏页除了使用户体验更好外,还能给app留出初始化数据 ...

  3. MVP的使用 + 闪屏页广告

    这是一个用mvp架构写的demo,实现了闪屏页的广告展示,版本更新弹窗.以及首页的Tab和带下拉刷新与上拉加载更多的列表页面,有需要的都可以进来仓库参考. 周一上线了一版,这些天在讨论下一波需求.正好 ...

  4. 【Android】android开发之splash闪屏页的四种实现方式,启动页的实现教程。

    2019独角兽企业重金招聘Python工程师标准>>> 作者:程序员小冰,GitHub主页: https://github.com/QQ986945193 新浪微博:http://w ...

  5. 闪屏页新手引导页面主页判断跳转的逻辑

    闪屏页的实现 : import android.app.Activity; import android.content.Intent; import android.os.Bundle; impor ...

  6. uniapp 引导页 启动页 闪屏页功能介绍及部分功能实现

    启动页设置 uniapp自带的启动页是一个白底的页面,上面有个uni的logo,然后周围有个圆圈的进度条,这个是启动页. uniapp中可以自定义启动页,注意两点: 不要勾选"启动界面显示等 ...

  7. Android 闪屏页的实现

    文章目录 前言 一.闪屏页的实现方式的思考 二.闪屏实现 1.设置闪屏Activity为app首页 2.闪屏Activity的theme 3.闪屏Activity的内部实现 总结 前言 闪屏页作为ap ...

  8. Android闪屏页适配

    Android闪屏页适配 首先,为了避免第一次打开出现白屏,所以应该自定义style,添加anroid:windowBackground属性.此属性下放了一张1080*1920的闪屏图片,会出现在不同 ...

  9. Android 12 SplashScreen(闪屏页)适配

    牢骚(废话) 谷歌真是吃饱了撑的,搞这搞那,Android12新出了一个强制闪屏页,效果就跟小米的闪屏页广告一样,只不过谷歌的是强制的,小米是可选的.不过谷歌再怎么搞,你还是要适配啊,难受. 正题 所 ...

  10. Android如何接入渠道SDK的闪屏页?一个activity就够了

    如果你是做SDK开发的,应该接入过很多渠道SDK,常见的渠道有华为.小米.VIVO.OPPO.应用宝.UC九游.三星.小七等,还有一些小的渠道以及一些聚合渠道SDK,成千上万个渠道,其中部分渠道是需要 ...

最新文章

  1. leetcode 725. Split Linked List in Parts | 725. 分隔链表(Java)
  2. 前端工程师和设计师必读文章推荐【系列三十六】
  3. 2017云栖大会:阿里巴巴宣布成立达摩院
  4. centos6 安装xhprof扩展
  5. 火线精英手游服务器维护,火线精英手机版登录失败进不去解决办法
  6. Hadoop只输出Key不输出Value的小技巧‏
  7. 密码库LibTomCrypt学习记录——目录
  8. 使用Depix进行马赛克的消除测试
  9. 【黑灰产犯罪研究】恶意点击
  10. 哥尼斯堡的“七桥问题”(欧拉回路)
  11. php 美颜,怀念以前无滤镜美颜的影视剧
  12. win10联网进入msn页面,信号出现感叹号
  13. 关于Context的理解(转)
  14. transformer股票步骤
  15. c语言程序设计流星雨,流星雨的实现C语言程序设计
  16. P6560 [SBCOI2020] 时光的流逝 (博弈,反向建图,拓扑排序
  17. 论文英文翻译绝招:OCR+grammarly
  18. Windows 无法访问指定设备、路径或文件。你可能没有适当的权限访问该项目
  19. Qt 快速入门系列教程
  20. imx6ull用C语言实现按键点灯代码

热门文章

  1. Python:20行代码爬取高质量帅哥美女视频,让你一次看个够
  2. java软连接_硬链接和软连接
  3. python3*1**3 表达式输出结果为_表达式[1, 2, 3]*3的执行结果为______________________。...
  4. Windows窗口编程之计算机,WindowsAPI窗口程序设计.docx
  5. pe系统 服务器维护,FirPE 维护系统
  6. 广告行业中那些趣事系列21:从理论到实战BERT知识蒸馏
  7. 解决mac更新系统后git无法使用
  8. CCNA-静态路由实验
  9. C/C++ DNS 查询IP地址
  10. 同一服务器不同端口网页,Apache Web服务器,在同一服务器上的不同端口上的多个应用程序...