HardBirch

Android多媒体学习十一:实现仿百度图片查看功能

时间:11-04-20 栏目:安卓学习笔记 作者:张飞不张,文采横飞 评论:22 点击: 7,211 次

我们知道,进入百度图片后,输入一个关键字后,首先看到的是很多缩略图,当我们点击某张缩略图时,我们就可以进入到大图显示页面,在

大图显示页面,中包含了一个图片画廊,同时当前大图为刚刚我们点击的那张图片。现在我们看看在Android中如何实现类似的效果:

 

首先,我们需要有一个控件来显示缩略图,这里没有什么比GridView更加合适了。

 

配置文件如下:

 

 

对于GridView中每一项是一张缩略图,我们需要继承BaseAdapter,实现自己的一个GridImageAdapter,代码:

 

 

然后,我们就可以在Activity中通过查询MediaStore的多媒体图片库来查询所有的图片的缩略图,缩略图所在的位置是:

MediaStore.Images.Thumbnails。Activity代码如下:

 

 

注意到,我们记录了,所有缩略图对应的id号,和当前的用户选择的位置,然后通过Intent传递到第二个展示界面。第二个界面的布局文件如下:我们用了一个Gallery和一个ImageButton来实现

 

 

然后,对应的Activity如下:

 

 

可以看到,当用户点击Gallery中某一项时,触发onItemClick事件,在其中,我们通过根据该缩略图对应的Image_ID来从MediaStore.Images.Media中查询该缩略图对应的大图。并在ImageButton中显示。

 

这里当图片很多时,可能会出现内存溢出,为了避免这种情况,可以更加Gallery的特点,使用缓存。保存当前可见的缩略图的前三个到后三个。其余的全部recycle。当用户点击Gallery的时候,在判断当前的位置,如果大于或小于某个值时,则重新更新缓存。这样保证内存中的缩略图的个数总是6+Gallery.getLastVisiblePosition-Gallery.getFirstVisiblePosition个。其实这就是浮动缓存窗口,一个固定大小窗口在整个坐标(全部缩略图)上游动。这里没有实现,以后待续。

 

同时,你可能已经注意到,程序中使用到了一个BitmapUtils类,这个类是封装了一系列对查询图片,并将其解析为Bitmap的类。

 

代码如下:

 

 

这样就实现了,类似百度图片浏览的效果。效果图如下:

 

缩略图

 

大图预览

 

 

 

 

Android多媒体学习十一:实现仿百度图片查看功能:目前有22 条留言

  1. 22楼
    xiaofeixia09:

    楼主,想你学习[e01]

    2011-04-26 20:00 [回复]
  2. 21楼
    xiaofeixia09:

    请问你现在工作就是做Android开发吗,能推荐些做Android开发的公司吗

    2011-04-26 20:02 [回复]
  3. 20楼
    xingye109:

    学习了,建议打个包。[e01]

    2011-05-06 10:44 [回复]
  4. 19楼
    clm86:

    [e03],学习了。。

    2011-05-10 17:01 [回复]
  5. 18楼
    clm86:

    能否打个包,学习。。

    2011-05-10 17:34 [回复]
  6. 这么有两个一样的GalleryActivity类呀?

    2011-05-21 14:15 [回复]
  7. 16楼
    easyshow:

    楼主如果出个教程打个包,那真是太好了。功德一件呀

    2011-05-22 11:34 [回复]
  8. [e01]持续关注、。。

    2011-06-03 10:23 [回复]
  9. 14楼
    shichuyao:

    学习中!顶了

    2011-06-23 01:13 [回复]
  10. [e02]自定义的GridImageAdapter类呢

    2011-06-27 14:54 [回复]
  11. 12楼
    zhao520_2:

    学习~~

    2011-08-01 17:11 [回复]
  12. 11楼
    q453919025:

    楼主是不是少了一个类 并且多了一个同名类?

    2011-08-05 21:57 [回复]
  13. 10楼
    lv_baoyuan:

    有人调试出来了没,那个自定义的GridImageAdapter类是怎么写的

    2011-09-23 17:12 [回复]
  14. 9楼
    sunluyao77:

    楼主能给我发一份你做的这个代码·吗·?想学习学习!

    2011-11-18 09:32 [回复]
  15. 8楼
    ywspace:

    楼主 能给发一份吗?Email: ywspace2006110@126.com 谢了先

    2011-12-08 11:06 [回复]
  16. 7楼
    ReizSoon:

    能给份源码么?我拷贝到工程老是报错哈。182007181@qq.com谢了哈

    2011-12-14 17:13 [回复]
  17. 楼主给我发一份 941895466@qq.com
    非常感谢 急用哈

    2012-02-14 13:25 [回复]
  18. 5楼
    zxy945:

    GridImageAdapter的代码贴错了。

    2012-03-02 14:57 [回复]
  19. [reply]zxy945[/reply]
    哦,对不起。代码在eoeandroid上面,你们搜多媒体实例大汇集,那里是这一系列文章的完整的代码。

    2012-03-03 09:19 [回复]
  20. hellO

    2012-03-07 11:13 [回复]
  21. 板凳
    DendyCC:

    LZ给发一份Dendycc@163.com,谢谢啦!

    2012-04-03 19:26 [回复]
  22. 沙发
    fengdexunmi:

    [reply]chenjie19891104[/reply]
    楼主,你好,在eoe中的多媒体大汇集中也没有GridImageAdapter类的实现代码,可以发到我邮箱么?(972014173@qq.com),万分感谢,并向你学习!

    2012-04-09 14:57 [回复]

发表评论


QQ群互动

Linux系统与内核学习群:194051772

WP建站技术学习交流群:194062106

魔豆之路QR

魔豆的Linux内核之路

魔豆的Linux内核之路

优秀工程师当看优秀书籍

优秀程序员,要看优秀书!

赞助商广告

友荐云推荐