`
izuoyan
  • 浏览: 8929047 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

【Android Advanced Training - 09】高效地显示Bitmap图片 [ Lesson 4 - 使用ViewPager与GridView显示图片 ]

 
阅读更多

Displaying Bitmaps in Your UI [在UI上呈现Bitmap]

  • 这一课会演示如何运用前面三节课的内容,使用后台线程与Cache机制来加载图片到ViewPagerGridView组件,并且学习处理并发与配置改变问题。
  • [并发问题的处理确实需要好好考虑,大多数App都没有仔细考虑到这个问题,会导致浪费更多的资源,效率不够]。

Load Bitmaps into a ViewPager Implementation [实现加载图片到ViewPager]

  • swipe view pattern是一个用来切换显示不同详情界面的很好的方法。[关于这种效果请先参看Android Design: Swipe Views,这是一个很好的设计,在很多App里面都可以看到这种设计,例如网易阅读,在阅读文章时可以左右滑动来切换文章,在Google Reader里面文章的切换也是这样,不过最终网易还是做的稍微好些,因为GReader对手势的判断有点过了,一不小心左右碰到就可能文章被切换掉,这点让我很苦恼,而网易阅读避免了这样的问题,需要用户动作稍大才会出现切换的效果].
  • 你可以通过PagerAdapterViewPager组件来实现这个效果. 然而,一个更加合适的Adapter是PagerAdapter的子类FragmentStatePagerAdapter它可以在某个ViewPager中的子视图切换出屏幕时自动销毁与保存Fragments的状态。这样能够保持消耗更少的内存。
  • 下面是一个使用ViewPager与ImageView作为子视图的示例。

  • 希望你有发现上面示例存在的问题:在UI Thread中读取图片可能会导致程序ANR。使用在Lesson 2中学习的AsyncTask会比较好。
  • BitmapWorkerTask中做一些例如resizing or fetching images from the network,不会卡到UI Thread。如果后台线程不仅仅是做个简单的直接加载动作,增加一个内存Cache或者磁盘Cache会比较好[参考Lesson 3],下面是一些为了内存Cache而附加的内容:

Load Bitmaps into a GridView Implementation [实现加载图片到GridView]

  • grid list building block是一种有效显示大量图片的方式。这样能够一次显示许多图片,而且那些即将被显示的图片也处于准备显示状态。如果你想要实现这种效果,你必须确保UI是流畅的,能够控制内存使用,并且正确的处理并发问题(因为GridView会循环使用子视图)。
  • 下面是一个在Fragment里面内置了ImageView作为GridView子视图的示例:

  • 与前面加载到图片到ViewPager一样,如果setImageResource的操作会比较耗时,有可能会卡到UI Thread。
  • 可以使用类似前面异步处理图片与增加缓存的方法来解决那个问题。然而,我们还需要考虑GridView的循环机制所带来的并发问题。为了处理这个问题,请参考前面Lesson 2:Processing Bitmaps Off the UI Thread。下面是一个更新的解决方案:

Note:对于ListView同样可以套用上面的方法。

  • 上面的方法提供了足够的弹性,使得你可以做从网络加载与Resize大的数码照片等操作而不至于卡到UI Thread。
  • 对于完整的代码示例,请参考Lesson 0:章节概览,下载完整示例。



学习自:http://developer.android.com/training/displaying-bitmaps/display-bitmap.html,请多指教,谢谢!

转载请注明出处 :http://blog.csdn.net/kesenhoo,谢谢配合!



分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics