关于android照片瀑布流的思考
2014-09-12 11:34
253 查看
前两天看到在csdn上看到Android瀑布流照片墙实现,体验不规则排列的美感一文,感觉很有意思,于是我自己也尝试做了一个;mark一下我的思路,以供以后的项目使用。
大方向上的思路:
照片瀑布流实际上就是一个自定义的scrollView包含三个垂直方向的lineaLayout;
详细思路:
1、一张一张的读取照片,逐个加在height最小的lineaLayout上;由于每张照片大小是不一样的;所以要先设置照片的大小;(宽度是确定的;可以根据宽高比得到图片的宽度);然后再根据宽高new imageView,通过addview(imageView)方法加载到height最小的lineaLayout上;
2、添加 touch事件;当下拉到底部的时候加载更多照片;
思路:
scrollview 只有onScrollChanged方法;无法确定scroll是否已处于停止状态;所以可以使用onTouchEvent来记录手势;
特别要注意的是:当手指离开屏幕,即当手指事件为action_up的时候滚动条仍然会惯性滑动,所以此时通过getScrollY()获取的值可能不准确;可以用一个lastScrollY来记录上一次的ScrollY值;
如果lastScrollY等于getScrollY(),说明滚动条已经停止了。此时就可以判断滚动条是否已经到了底部,如果到了底部则调用图片加载方法去加载更多的图片;
如果不相等,说明滚动条还在惯性滑动;可以隔一段事件后再次比较lastScrollY和当前的ScrollY;
3、照片的加载思路:
为了图片的加载速度,可以设置图片缓存(硬盘缓存,内存缓存)
1)使用异步任务加载图片;检测所需图片是否存在与缓存中,如果有,返回图片;如果图片存在于硬盘缓存不存在于内存缓存;可以将图片添加于内存缓存;内存缓存可以使用LruCache;保证图片占用的内存缓存小于一个范围而不会出现OOM。如果缓存中没有,则从网络中下载(记得添加权限;android.permission.INTERNET);从网络下载下来后,将图片添加至缓存(硬盘缓存,内存缓存);
2)当需要加载更多的图片的时候;判断如果此时没有下载任务则可以加载更多图片,如果没有更多图片,则显示 no more image;
3)在滑动过程中,有些图片会不可见;可以将不可见的图片设置为资源文件的一个图片,节省内存;可以通过TAG来标示一个图片;要注意的是:使用多个TAG绑定的时候,要先在res/values/strings.xml中添加
<resources>
<item type="id" name="tag_first"></item>
<item type="id" name="tag_second"></item>
</resources>
使用的时候写成
imageView.setTag(R.id.tag_first, "Hello");
imageView.setTag(R.id.tag_second, "Success”);
就可以了;
详细代码下载路径:http://download.csdn.net/detail/annieliu502/7902193
大方向上的思路:
照片瀑布流实际上就是一个自定义的scrollView包含三个垂直方向的lineaLayout;
详细思路:
1、一张一张的读取照片,逐个加在height最小的lineaLayout上;由于每张照片大小是不一样的;所以要先设置照片的大小;(宽度是确定的;可以根据宽高比得到图片的宽度);然后再根据宽高new imageView,通过addview(imageView)方法加载到height最小的lineaLayout上;
2、添加 touch事件;当下拉到底部的时候加载更多照片;
思路:
scrollview 只有onScrollChanged方法;无法确定scroll是否已处于停止状态;所以可以使用onTouchEvent来记录手势;
特别要注意的是:当手指离开屏幕,即当手指事件为action_up的时候滚动条仍然会惯性滑动,所以此时通过getScrollY()获取的值可能不准确;可以用一个lastScrollY来记录上一次的ScrollY值;
如果lastScrollY等于getScrollY(),说明滚动条已经停止了。此时就可以判断滚动条是否已经到了底部,如果到了底部则调用图片加载方法去加载更多的图片;
如果不相等,说明滚动条还在惯性滑动;可以隔一段事件后再次比较lastScrollY和当前的ScrollY;
3、照片的加载思路:
为了图片的加载速度,可以设置图片缓存(硬盘缓存,内存缓存)
1)使用异步任务加载图片;检测所需图片是否存在与缓存中,如果有,返回图片;如果图片存在于硬盘缓存不存在于内存缓存;可以将图片添加于内存缓存;内存缓存可以使用LruCache;保证图片占用的内存缓存小于一个范围而不会出现OOM。如果缓存中没有,则从网络中下载(记得添加权限;android.permission.INTERNET);从网络下载下来后,将图片添加至缓存(硬盘缓存,内存缓存);
2)当需要加载更多的图片的时候;判断如果此时没有下载任务则可以加载更多图片,如果没有更多图片,则显示 no more image;
3)在滑动过程中,有些图片会不可见;可以将不可见的图片设置为资源文件的一个图片,节省内存;可以通过TAG来标示一个图片;要注意的是:使用多个TAG绑定的时候,要先在res/values/strings.xml中添加
<resources>
<item type="id" name="tag_first"></item>
<item type="id" name="tag_second"></item>
</resources>
使用的时候写成
imageView.setTag(R.id.tag_first, "Hello");
imageView.setTag(R.id.tag_second, "Success”);
就可以了;
详细代码下载路径:http://download.csdn.net/detail/annieliu502/7902193
相关文章推荐
- Android照片墙瀑布流的实现与思考
- 关于Qt for Android的一点思考---为啥是C,又为啥不可以是java?!
- Android关于OutOfMemoryError的一些思考
- Android记录5--关于Android云测试的小思考
- 关于《Android照片墙应用实现,再多的图片也不怕崩溃 》博文中的Bug修复
- Android瀑布流照片墙实现
- 关于Android零基础学习的思考
- Android瀑布流照片墙实现,体验不规则排列的美感
- 关于Android试水项目的思考
- 搜寻了关于android推送资料后的一些思考
- Android瀑布流照片墙实现,体验不规则排列的美感
- 关于下载xbmc后打开Android 源码时的一个思考问题?兼各平台安装xbmc 的中文显示
- Android关于OutOfMemoryError的一些思考
- 关于Android零基础学习的思考
- Android关于Activity和task以及近期任务栏启动的相关思考
- 关于android调用相机及拍照的存储和照片处理功能的全面小案例
- android下ViewGroup关于Layout的一点思考
- Android 照片瀑布流 android_waterfall
- Android瀑布流照片墙实现,体验不规则排列的美感
- Android瀑布流照片墙实现,体验不规则排列的美感