一般项目中图片加载用的比较多的是ImageLoader 但是需求自己配置一些参数 上手有些复杂

对于手机图库中有上千张图片需要加载时 一个使用性能很好的库Glide可以解决 效果图如下

滑动非常流畅 加载速度也很快 而且使用也非常简单 个人感觉比手机自带的图库效果更佳

上图上代码

Code

  1. public class MainActivity extends Activity {
  2.  
  3. ArrayList<String> fileNames = new ArrayList<String>(); //本地图片路径
  4.  
  5. @Override
  6. protected void onCreate(Bundle savedInstanceState) {
  7. super.onCreate(savedInstanceState);
  8. setContentView(R.layout.activity_main);
  9.  
  10. initData();
  11.  
  12. GridView listView = (GridView) findViewById(R.id.gridview);
  13. //ImageAdapter imageAdapter = new ImageAdapter(getApplicationContext(),Images.imageUrls);
  14. ImageAdapter imageAdapter = new ImageAdapter(getApplicationContext(), fileNames);
  15.  
  16. listView.setAdapter(imageAdapter);
  17. }
  18.  
  19. private void initData() {
  20.  
  21. fileNames.clear();
  22. Cursor cursor = getContentResolver().query(Media.EXTERNAL_CONTENT_URI, null, null, null, null);
  23. while (cursor.moveToNext()) {
  24. byte[] data = cursor.getBlob(cursor.getColumnIndex(Media.DATA)); //图片的保存位置的数据
  25. fileNames.add(new String(data, 0, data.length - 1));
  26. }
  27. }
  28.  
  29. }

activity_main

  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:tools="http://schemas.android.com/tools"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. tools:context="com.example.imagelist.MainActivity" >
  6.  
  7. <GridView
  8. android:id="@+id/gridview"
  9. android:layout_width="match_parent"
  10. android:layout_height="wrap_content"
  11. android:numColumns="3"
  12. android:horizontalSpacing="2dp"
  13. android:verticalSpacing="2dp"
  14. >
  15. </GridView>
  16.  
  17. </RelativeLayout>

ImageAdapter

  1. public class ImageAdapter extends BaseAdapter {
  2.  
  3. private Context context;
  4. private String[] imageUrls;
  5. ArrayList<String> fileNames;
  6. private LinearLayout.LayoutParams mImageViewLayoutParams;
  7.  
  8. /*
  9. * public ImageAdapter(Context context, String[] imageUrls) { super();
  10. * this.context = context; this.imageUrls = imageUrls; }
  11. */
  12.  
  13. public ImageAdapter(Context context, ArrayList<String> fileNames) {
  14. super();
  15. this.context = context;
  16. this.fileNames = fileNames;
  17.  
  18. DisplayMetrics dm = context.getResources().getDisplayMetrics();
  19. int wh = dm.widthPixels;
  20.  
  21. int w = (wh - context.getResources().getDimensionPixelSize(R.dimen.test) * 2) / 3;
  22. mImageViewLayoutParams = new LinearLayout.LayoutParams(w, w);
  23. }
  24.  
  25. @Override
  26. public int getCount() {
  27. return fileNames.size();
  28. }
  29.  
  30. @Override
  31. public Object getItem(int position) {
  32. return null;
  33. }
  34.  
  35. @Override
  36. public long getItemId(int position) {
  37. return position;
  38. }
  39.  
  40. @Override
  41. public View getView(int position, View convertView, ViewGroup parent) {
  42.  
  43. View view;
  44. if (convertView == null) {
  45. view = LayoutInflater.from(context).inflate(R.layout.item, null);
  46. } else {
  47. view = convertView;
  48. }
  49. ImageView image = (ImageView) view.findViewById(R.id.image);
  50. image.setLayoutParams(mImageViewLayoutParams);
  51.  
  52. Glide.with(context).load(fileNames.get(position)).centerCrop().placeholder(R.color.test).crossFade()
  53. .into(image);
  54.  
  55. return view;
  56.  
  57. }
  58. }

item

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:orientation="vertical" >
  6.  
  7. <ImageView
  8. android:id="@+id/image"
  9. android:layout_width="wrap_content"
  10. android:layout_height="wrap_content"
  11. android:scaleType="centerCrop"
  12. />
  13.  
  14. </LinearLayout>

Demo见github

https://github.com/huanyi0723/ImageList

Android 上千张图片的列表滑动加载的更多相关文章

  1. ListView、PullToRefreshListView滑动加载可见item

    最近用的了PullToRefreshListView框架,也在listView中加载图片,对于滑动加载可见item,网上找了一些相关文档,但都不太合适,如:http://blog.csdn.net/z ...

  2. WPF技术触屏上的应用系列(五): 图片列表异步加载、手指进行缩小、放大、拖动 、惯性滑入滑出等效果

    原文:WPF技术触屏上的应用系列(五): 图片列表异步加载.手指进行缩小.放大.拖动 .惯性滑入滑出等效果 去年某客户单位要做个大屏触屏应用,要对档案资源进行展示之用.客户端是Window7操作系统, ...

  3. 我的Android进阶之旅------>Android疯狂连连看游戏的实现之加载界面图片和实现游戏Activity(四)

    正如在<我的Android进阶之旅------>Android疯狂连连看游戏的实现之状态数据模型(三)>一文中看到的,在AbstractBoard的代码中,当程序需要创建N个Piec ...

  4. Android Volley和Gson实现网络数据加载

    Android Volley和Gson实现网络数据加载 先看接口 1 升级接口 http://s.meibeike.com/mcloud/ota/cloudService POST请求 参数列表如下 ...

  5. 携程Android App的插件化和动态加载框架

    携程Android App的插件化和动态加载框架已上线半年,经历了初期的探索和持续的打磨优化,新框架和工程配置经受住了生产实践的考验.本文将详细介绍Android平台插件式开发和动态加载技术的原理和实 ...

  6. ios 图片的两种加载方式

    控件加载图片,plist,懒加载,序列帧动画,添加动画效果. IOS中有2种加载图片的方式. 方式一:有缓存(图片所占用的内存会一直停留在程序中) + (UIImage *)imageNamed:(N ...

  7. Android中ViewPager+Fragment取消(禁止)预加载延迟加载(懒加载)问题解决方案

    转载请注明出处:http://blog.csdn.net/linglongxin24/article/details/53205878本文出自[DylanAndroid的博客] Android中Vie ...

  8. Android中使用WebView, WebChromeClient和WebViewClient加载网页 (能够执行js)

    Android中使用WebView, WebChromeClient和WebViewClient加载网页   在android应用中,有时要加载一个网页,如果能配上一个进度条就更好了,而android ...

  9. jQuery 图片随滚动条滚动加载

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

随机推荐

  1. ubuntu-E:Encountered a section with no Package: header的解决办法

    刚才打开ubuntu,我的版本是12.04.正想使用sudo apt-get install build-essential 时,出现了如下错误: E:Encountered a section wi ...

  2. 集合(Collection)使用笔记

    Collections.unmodifiableCollection这个可以得到一个集合的镜像,它的返回结果不可直接被改变,否则会提示 java.lang.UnsupportedOperationEx ...

  3. [转]关于 initWithNibName 和 loadNibNamed 的区别和联系-iPhone成长之路

    转载地址:http://blog.sina.com.cn/s/blog_7b9d64af01018f2u.html 关于 initWithNibName 和 loadNibNamed 的区别和联系.之 ...

  4. linux修改mac地址

    先禁用网卡ifconfig eth0 down 再用ifconfig eth0 hw ether 新地址 这样就可以了 要想永久修改的话,在/etc/rc.d/rc.local里加上下面三句(/etc ...

  5. Unity-Animator深入系列---剪辑播放后位置预判(Animator.Target)

    回到 Animator深入系列总目录 animator.SetTarget(...);可以在播放前预判剪辑播放后的位置,但只限于人形动画 参数1是预判的关节,参数2是映射的剪辑时间 调用后通过targ ...

  6. JAVA基础知识之JVM-——动态代理(AOP)

    代理模式简介 在很多场景下,我们想使用一个类(通常是接口)A时,并不是直接使用这个类,而是通过另外一个类B去调用A的方法,这里的类B就是一个代理类. 有很多场景都会用到这种方法,例如假如创建类A需要很 ...

  7. linux中的shell脚本编程

    [1]shell脚本 1--- shell命令 2--- 控制语句(新的语法) (Shell命令的有序集合) [2]创建shell脚本文件 1--- 1.sh 2--- chmod 777 1.sh ...

  8. SQL调用存储过程

    --1调用存储过程exec 存储过程名 参数--2当表使用select a.*,b.* from tb b inner join (select * from openrowset('sqloledb ...

  9. oracle数据库导入导出dmp文件oracle命令

    在控制台下导入imp scott/密码@orcl file=文件路径 full=Y 导出 整个数据库TEST 用户名system  密码1234 exp system/1234@TEST file=文 ...

  10. 2012 #3 Flowers

    Flowers Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit Stat ...