ViewPager系列之-仿掌上英雄联盟皮肤浏览效果

栏目: Android · 发布时间: 7年前

内容简介:ViewPager系列之-仿掌上英雄联盟皮肤浏览效果

ViewPager系列之-仿掌上英雄联盟皮肤浏览效果

封面图:希维儿皮肤

能有一个双休的周末,对于 程序员 来说,也算是一件幸福的事情吧。苦逼的加了一周的班,终于可以休息放松放松了。作为一个LOL爱好者,周末最开心的事当然就是约上几个小伙伴一起开黑了。一起超神、一起连跪,也算是周末的一大乐事。

这几天英雄联盟搞活动,抽到一个安妮限定皮肤,可把我乐坏了,于是马上就登陆掌盟客户端查看皮肤。进入皮肤浏览界面之后,觉得这个皮肤浏览的效果还真不错,如下图:

ViewPager系列之-仿掌上英雄联盟皮肤浏览效果

作为一个程序员,当然第一时间就是思考它是怎么实现的?我能用什么方法来实现类似的效果?于是花了半天的时间,做了一个类似的效果。因此本篇文章就分享一下如何实现这一效果。最后实现的效果如下:

ViewPager系列之-仿掌上英雄联盟皮肤浏览效果

由于微信限制图片的大小为2M,上面的gif压缩后看起来真是AV画质啊(无奈…),原效果还是不错的,请在文末点击 查看原文 看原效果。

思路与分析

在开始写代码之前,我们还是来分析一下界面元素,和该用什么技术来实现各个部分。

1,首先是整个界面的滑动,我们肯定一眼就能看出来,用ViewPager 实现。

2,ViewPager 滑动时有放大缩小的动画,用ViewPager.Transfoemer 轻松搞定。

3,ViewPager 显示多页(展示前后页面的部分)。

4,界面图片的形状,旋转90度的等腰梯形。这个只能用自定义View来实现了。

5,整个界面的背景为当前显示图片的高斯模糊图。

代码实现

上面分析了界面的构成元素,那么现在我们就来看一下具体的实现。

1, ViewPager 展示多页

这个问题在我们前一篇文章已经讲过,这里不再重复,就是用ViewGroup 的 clipChildren 属性,值为false。也就是在整个布局的跟节点添加下面一行代码:

android:clipChildren="false"

然后,ViewPager需要设置左右Margin,也就是前后页显示的位置

ViewPager系列之-仿掌上英雄联盟皮肤浏览效果

从上面的效果图可以看到,当前页和前后页的部分是有间距的,我们只需要在Item布局中左右添加margin属性:

android:layout_marginLeft="30dp"
 android:layout_marginRight="30dp"

好了,这样ViewPager就能显示多页,并且当前页和前后页之间还有一定的间距。

2, ViewPager 切换时的动画

ViewPager 切换时的自定义动画用 ViewPager.PageTransformer ,  这个在上一篇文章也讲过,没看过的倒回去看一下。这里不细讲了,直接上代码:

ViewPager系列之-仿掌上英雄联盟皮肤浏览效果

3, 自定义多边形ImageView

多边形ImageView,我们通过自定义的方式实现,继承ImageView, 然后重写onDraw()方法。 这里实现这种不规则的多边形View有两种方法。

第一:使用PorterDuffXfermode,这种方法需要你给一个蒙板图片,在onDraw 方法中,先绘制蒙板图片,然后设置Paint的 setXfermodePorterDuff.Mode.SRC_IN ,再绘制要显示的图片,这样就能把显示的图片裁剪成蒙板的形状。

第二: 使用canvas的 clipPath() 方法,我们用Path 来绘制多边形,然后 clipPath() 将画布裁剪成绘制的形状,然后在绘制要显示的图片。

关于PorterDuffXfermode 的更多用法,有兴趣的可以去google 一下,网上有很多相关的文章。这里我用的是两种方法的结合,先用clipPath得到一个需要形状的bitmap,然后使用PorterDuffXfermode。自定义View代码如下:

ViewPager系列之-仿掌上英雄联盟皮肤浏览效果 ViewPager系列之-仿掌上英雄联盟皮肤浏览效果 ViewPager系列之-仿掌上英雄联盟皮肤浏览效果

建议:这里使用clipPath方法的时候,会出现很多锯齿,即使Paint 设置了抗锯齿也没啥用,所以建议使用PorterDuffXfermode 方法。要实现类似的效果,最好是找设计师要一张蒙板形状图。在用PorterDuffXfermode实现,简单效果好。

通过上面的3步,其实整个 界面的效果差不多已经出来了,最后我们需要做的就是高斯模糊背景图。

4,  背景图高斯模糊

背景的高斯模糊就很简单了,前面我也有写过关于几种高斯模糊方法的对比(Android 图片高斯模糊解决方案),最后封装了一个方便的库(https://github.com/pinguo-zhouwei/EasyBlur)

只需要简单几行代码就行。我们在ViewPager的onPageSelect方法中,获取显示的图片,进行高斯模糊处理。

ViewPager系列之-仿掌上英雄联盟皮肤浏览效果

最后,给出完整的布局文件和Activity代码:

1, activity布局文件:

ViewPager系列之-仿掌上英雄联盟皮肤浏览效果 ViewPager系列之-仿掌上英雄联盟皮肤浏览效果

2, Activity代码:

ViewPager系列之-仿掌上英雄联盟皮肤浏览效果 ViewPager系列之-仿掌上英雄联盟皮肤浏览效果

ViewPager的每一个页面用Fragment 来展示的,Fragment代码如下:

ViewPager系列之-仿掌上英雄联盟皮肤浏览效果

说明:在Fragment中对PolygonView做了一个旋转的动画,是因为PolygonView 是一个竖着的等腰梯形,但是看效果图,其实不是,还有一个小幅度的旋转.

如果将这个旋转放在PolygonView 里面做的话,发现每次ViewPager 切换的时候,都有一个旋转动画,效果不好,因此将动画放在这里。应该还有其他更优雅一点的方法,有兴趣的可以去试一下。

最后

本篇文章是ViewPager 系列的第三篇文章,也是这个系列的最后一篇文章,这三篇文章总结了ViewPager 的一些常用方法,如Banner 、切换动画等等。还讲了如何封装一个扩展性强,比较通用的ViewPager。

这也是对自己以前用过的这些知识点的一个总结和沉淀。喜欢的话可以关注我的简书和掘金账号,会不定期的更新Android相关的优质文章。如果有什么问题的话也欢迎指出交流。

ViewPager系列文章:

1 , ViewPager系列之 打造一个通用的ViewPager:http://www.jianshu.com/p/fb24e3343a2e

2 , ViewPager系列之 仿魅族应用的广告BannerView:http://www.jianshu.com/p/653680cfe877

ViewPager系列之-仿掌上英雄联盟皮肤浏览效果

Android技术杂货铺

ViewPager系列之-仿掌上英雄联盟皮肤浏览效果

长按二维码关注我们吧!


以上所述就是小编给大家介绍的《ViewPager系列之-仿掌上英雄联盟皮肤浏览效果》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

在你身边,为你设计

在你身边,为你设计

腾讯公司用户研究与体验设计部 / 电子工业出版社 / 2013-1 / 69.00元

设计属于所有人,也意在为所有人使用,这既是设计的价值,也是设计的责任。本书内容包括:设计理念、设计方法、用户研究、体验设计、设计流程和工具,以及团队成长与管理等方面的知识与经验分享。一起来看看 《在你身边,为你设计》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具