前言

大图浏览几乎是App必备功能,因为一般列表展示的图片,考虑到性能,速度以及服务器带宽的问题,都是压缩过的缩略图。如果用户想看详细的大图,则需要点击图片进入大图浏览界面。

大图浏览界面怎么做?

粗略的我们可以用一个对话框,里面放ViewPager,然后缩放用PhotoView。以前我也是这么干的。但这么做是不符合Material Design设计的,因为界面之间的切换太突兀,没有如丝般顺滑的过渡效果。

无图言Diao

来看下我实现的效果:

之前在Android端目前我觉得大图浏览体验最好的就是掘金App的效果,我这个应该可以媲美掘金的效果了。真实体验你会发现,可能比掘金的更流畅,更丝滑。

原理分析

原理上有几个点:

  • 图片之间的过渡

图片之间的过渡是指小图到大图的过渡,中间没有任何的跳跃变化,需要是丝滑而自然的过渡。这个要考虑的使用者的ImageView有可能是各种的ScaleType。对于任意的ScaleType如何实现完美的过渡呢?

答案只有一个,就是: Martirx。

因为无论ImageView的ScaleType是什么,最终都会计算出一个DrawMartix,它表示图片的像素矩阵。所以对Martix进行过渡才是正确的,这过程中我探索了很多方案,比如宽高,手动计算Martix。

至于具体怎么对Martix进行过渡,我们可以很容易写出一个ValueAnimator,也可以用系统的ChangeImageTransform来做。我选择的是后者。具体看源码吧。

  • 界面之间的过渡

界面之间的过渡,指的是从调用者的界面过渡到大图界面。这其实是一个弹窗效果,它主要伴随着背景明暗的渐变,这个很容易实现。你可以用PopupWindow,Dialog,或者whatever。我是直接依靠XPopup(我的一个弹窗库)提供的弹窗实现。

  • 可拖拽的容器

从动图中可以看到,大图浏览可以通过点击关闭,也可以通过手势上下滑动关闭。可拖拽的容器实现起来并不难,可以自己操作TouchEvent,也可以用ViewDragHelper。我比较喜欢后者。核心的拖拽代码其实不超过50行。

单单拖拽很好做,但是涉及到ViewPager和里面的PhotoView就有点麻烦了。需要处理好跟ViewPager的滑动优先选择,还要PhotoView是否可以允许外界拖拽。更细节的东西可以看代码。

如何使用

上面的效果,我直接内置在XPopup中,提供一个封装。使用起来也就是这样:

XPopup.get(getContext()).asImageViewer(imageView, position, list, new OnSrcViewUpdateListener() {@Overridepublic void onSrcViewUpdate(ImageViewerPopupView popupView, int position) {// 作用是当Pager切换了图片,需要更新源ViewpopupView.updateSrcView((ImageView) recyclerView.getChildAt(position));}}).show();
复制代码

具体使用请查看:github.com/li-xiaojun/…

最后:曾经的Android开发很难,为简化Android开发贡献一份小小的力量。

媲美掘金App大图浏览效果,你确定不看一下?相关推荐

  1. 仿微信点击图片放大,并可滑动浏览效果

    前言   我们在微信朋友圈看别人发的带图片说说时,点击某张图片,会放大全屏显示,并且左右滑动可以切换浏览多张图片.   这种效果应用场景很多,尤其是购物和餐饮类app很常见.比如点餐软件,一般会向顾客 ...

  2. AndroidTV开发13——实现TV端大图浏览

    AndroidTV开发13--实现TV端大图浏览 最近TV开发需要加载的图片很长,大小也很大,并且还不允许压缩.比如显示:世界地图.清明上河图.微博长图.海报.活动照片等. 那么对于这种需求,该如何做 ...

  3. Flutter入门实战教程:从0到1仿写web版掘金App (完结)

    前言 准确的说,这是去年十一月份就写好的教程, 虽然迟迟未上线(拖了半年),但是非常感谢购买的老铁们~ 虽然心中很不爽, 但是回头想想,也是的确写的比较仓促,但是当时自己在写的过程中,的确能学到很多东 ...

  4. flutter 基于掘金App实现的UI页面

    flutter 基于掘金App实现的UI页面 项目地址: https://github.com/JunIce/juejin_flutter_ui 项目启动 众所周知的原因, 国内能查到的有关flutt ...

  5. html相册浏览页面怎么做,ul结合CSS制作网页相册滑动浏览效果

    ul结合CSS制作网页相册滑动浏览效果 互联网   发布时间:2008-10-17 19:25:02   作者:佚名   我要评论 英文原文:Sliding Photograph Galleries ...

  6. Android之——史上最简单最酷炫的3D图片浏览效果的实现

    转载请注明出处:http://blog.csdn.net/l1028386804/article/details/48052709 如今,Android开发已经成为移动互联开发领域中一支不可或缺的力量 ...

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

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

  8. Android 使用Toolbar+DrawerLayout快速实现仿“知乎APP”侧滑导航效果

    在以前,做策划导航的时候,最常用的组件便是SlidingMenu了,当初第一次用它的时候觉得那个惊艳啊,体验可以说是非常棒. 后来,Android自己推出了一个可以实现策划导航的组件DrawerLay ...

  9. Android开发p图软件,媲美大神P图效果 Android软件抠图神手

    媲美大神P图效果 Android软件抠图神手 2013年02月20日 01:50作者:杨霏霏编辑:杨霏霏文章出处:泡泡网原创 分享 泡泡网手机频道2月20日 PS的功能大家耳熟能详,其中抠图便是各位P ...

最新文章

  1. jQuery和dom的相互转换
  2. BGP 最佳路径选择之 -- Origin
  3. Arduino可穿戴开发入门教程LilyPad和LilyPad Simple的介绍
  4. 我的一些小想法(聊以一笑……)
  5. MyEclipse中导入java文件出现乱码问题的解决方法
  6. Git学习资源收集汇总
  7. oracle表空间于表数据啥意思,初识Oracle表空间与数据文件
  8. Scanner读取一个int数组
  9. 机器学习算法Python实现:word2vec 求词语相似度
  10. 用Docker部署TensorFlow Serving服务
  11. 如何控制Yahoo! Slurp蜘蛛的抓取频度_国外博客资源站_百度空间
  12. 为类型库(Type Library)生成帮助文件
  13. swfobject.js
  14. python面试之腾讯测试开发工程师
  15. 神经元模型hhmodel模型_基于HH模型神经元动作电位的模拟与实现
  16. 如何做到秒级扩容1000加业务节点
  17. 计算机信息中心管理制度,信息技术中心内部管理制度(试行)
  18. 谷歌抢注18个“.中国”域名:扫清障碍
  19. android:ems 属性
  20. 摄像头直播视频接口视频播放器

热门文章

  1. 地税计算机发展,金税三期背景下湛江地税信息化发展策略研究
  2. 天干地支 工具类java_java日期工具类DateUtil-续二
  3. 神秘指标一出现,市场立马就变天 | 用Python计算成交量集中度(附代码)【邢不行】
  4. 虚拟服务器建网站苹果cms,苹果CMS系统建站安装步骤
  5. redis集群的安装部署
  6. mysql做kv数据库_从零开始写KV数据库:基于哈希索引
  7. 【数据库-Oracle】日期-时间 语法
  8. 在ubuntu下配置Defects4j
  9. 浏览器主页锁定在毒霸网址大全
  10. 周鸿伟给创业者的建议