TransitionAnimation 的内存预加载,优化不同尺寸图片的顺滑穿越

meizhigif

 

在做 妹纸.gank.io 的时候,我遇到了一个问题,当我使用 5.0 所带来的新 TransitionAnimation 特性的时候——这个特性简单说就是让两个页面相同的组件能够来回穿越,如 gif 图所示——我发现我点击主页的妹纸图,跳到查看妹纸原图的页面,会在妹纸原图的页面出现小问题,即有时妹纸图会卡在左上角没有扩展到整个屏幕大小。这个问题在5.0以下的系统尤其明显。

原因我想是因为两张妹纸图的尺寸其实是不一样的,在主页使用的是略缩图,而在 PictureActivity 使用的是原图,两张尺寸不一样,于是 load 图片的时候,需要重复去取缓存文件(或网络文件)再加载到内存当中,读取文件总是要一定时间,导致跳跃或卡在左上角的问题。

而且我发现当第二次点击的时候,就不会卡或跳跃,因为这张原图已经在第一次 load 的时候加载到内存中了,第二次就直接内存中取了,因而很顺滑完美。

发现了这两点以后,我很快想到一个优化方案,这个方案就是为了让第一次如第二次一般顺滑流畅。想到:只要原图在内存中已经存在,点击之后到原图页面就不会出问题,那么我只要让程序在点击的时候预先加载到内存,等加载好了,再进行回调 startActivity() 是不是就好了?应该没错,那么怎么才能预加载到内存呢?我想到了很久以前看到 Instagram 的一篇优化文章,讲得是 Instagram 对于 TextView 的预加载预渲染方案,便是在一块看不见的地方,进行预先加载渲染。——因此我很自然也是想到在看不见的地方放一个 ImageView 来作为预加载的载体,等加载完了,原图可能已经存在于内存中,这时候再 load 就顺滑了。

没想到这个想法实现起来一下子就奏效了,都没想到这么完美,便是如右上边的 gif 图所示,顺滑穿越~

看到这个小细节小问题被解决,真是特别开心,真的是写程序的乐趣不过如此,自我陶醉,哈哈!另外,说来也感慨,在看乔布斯的那次「Stay hungry. Stay foolish.」的演讲,我记得乔布斯分享过他的一个故事,说如果它没有在十年前学过字体的创造知识,也就不能够在十年后的 Mac 电脑上用上(实现、创造)那么漂亮的字体,不懂得考究。而我如果很久以前没有看到那篇 Instagram 的 TextView 优化,我估计也想不出现今这个很不错的解决方案。

  1. Pingback: Overzicht Loterijen

  2. Pingback: Ziektekostenverzekering vergelijken

  3. Pingback: tivibu

  4. Pingback: http://www.thanhlapdoanhnghiepgiare.org

  5. Pingback: iphone 7 unboxing

  6. Pingback: night photography

  7. Pingback: poker online gratis minijuegos

  8. Pingback: juegosfriv.one

  9. Pingback: juegos friv-friv

  10. Pingback: child abuse

  11. Pingback: Bilskrot Göteborg

  12. Pingback: Skrota bilen

  13. Pingback: download free

  14. Pingback: Legal Services

  15. Pingback: http://www.godwinsremovals.co.uk/international-removals/northern-ireland

  16. Pingback: buy humulin r online

  17. Pingback: Denver Uber

  18. Pingback: mold remediation

  19. Pingback: lawyer

  20. Pingback: porno

  21. Pingback: kimim ben

  22. Pingback: hcg 5000 iu vial for sale

  23. Pingback: computer reparatie Aalten

  24. Pingback: tim tebow steroids

  25. Pingback: joseph de saram

  26. Pingback: joseph s r de saram

  27. Pingback: joe de saram

  28. Pingback: where can i buy oxandrolone

  29. Pingback: economics tuition

  30. Pingback: Best Newspaper in India

  31. Pingback: aboutjoe

  32. Pingback: para para dinle

  33. Pingback: Best Newspaper in India

  34. Pingback: Best Magazine in India

  35. Pingback: New Artists

  36. Pingback: venus factor

  37. Pingback: Stage Door Rehearsal & Recording Studios Reviews & Contact Details

  38. Pingback: Find Businesses in Australia

  39. Pingback: Internet Services in Australia

  40. Pingback: PureLocal.com.au - Australia's Business Directory

  41. Pingback: listing my business on google

  42. Pingback: audio video company michigan

  43. 这个切换效果真的很赞。但这个动画在4.4上没有效果,只是简单的side_in动画,奇怪的是这个已经是在support.v4的ActvityOptionsCompat兼容包里了,但居然还只是5.0以上才有效。

    • 有很多带 Compat 字样的 api 并不是代表兼容所有版本,而是作为一个自动选择的封装,即如果可使用,则使用,如果不可以使用,就不使用,开发者不用再自己判断版本号,也不会出错。

  44. TransitionAnimation 有兼容库,楼主可以考虑实现pre-L下的效果兼容