加载高清大图(本地、在线)---使用subsampling-scale-image-view
2017-12-05 17:41
996 查看
参考学习网址:
关于Andorid加载高清大图(仿sina weibo 里面的长图效果) - CSDN博客 http://blog.csdn.net/t1623183652/article/details/50037351
尝试用了Glide、PhotoView、ImageLoader等等方法,一般图片都能勉强加载出来,但就是高清超长图加载不出来,界面一片黑;使用LargeImageView把图片加载出来了,但很卡,ε=(´ο`*)))唉操作太不理想了。就在一筹莫展地时候,突然神奇地发现了subsampling-scale-image-view(第一次听说),马上试了一下,太棒啦,加载高清长图完全没压力。废话不多说了,直接上具体的使用步骤。
1.添加依赖:
2.布局:
3.加载本地图片:
4.加载网络图片
subsampling-scale-image-view控件只能加载本地图片,但它能加载缓存里面的文件,所以通过Glide获取到缓存文件,再用它显示出来؏؏☝ᖗ乛◡乛ᖘ☝؏؏ 嫌缓存文件占存储空间,不用的时候删掉就是了呗,反正就一句话的事儿
为Glide添加依赖:
具体代码:
先用Glide获取到图片的硬盘缓存后,再用控件显示出来。
在退出此界面时,删除Glide缓存的图片硬盘文件。
补充:
根据图片自身大小,计算其缩放比例,使其宽度与屏幕宽度一致;这样你在初次显示图片的时候就可以设置其与屏幕同宽了。
把图片的最大放大比例设置为其填满屏幕宽度后再加2.0f;图片初次显示时从屏幕左上角开始显示,并且正好填满屏幕的宽度。
关于Andorid加载高清大图(仿sina weibo 里面的长图效果) - CSDN博客 http://blog.csdn.net/t1623183652/article/details/50037351
尝试用了Glide、PhotoView、ImageLoader等等方法,一般图片都能勉强加载出来,但就是高清超长图加载不出来,界面一片黑;使用LargeImageView把图片加载出来了,但很卡,ε=(´ο`*)))唉操作太不理想了。就在一筹莫展地时候,突然神奇地发现了subsampling-scale-image-view(第一次听说),马上试了一下,太棒啦,加载高清长图完全没压力。废话不多说了,直接上具体的使用步骤。
具体步骤:
这个控件有双指缩放、双击缩放的功能!!!1.添加依赖:
compile 'com.davemorrissey.labs:subsampling-scale-image-view:3.5.0'
2.布局:
<com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView android:id="@+id/subsampling_scale_image_view" android:layout_width="match_parent" android:layout_height="match_parent"/>
3.加载本地图片:
subsamplingScaleImageView.setMinimumScaleType(SubsamplingScaleImageView.SCALE_TYPE_CUSTOM); subsamplingScaleImageView.setMinScale(0.1F);//最小显示比例 subsamplingScaleImageView.setMaxScale( 5.0f);//最大显示比例 File file = new File(saveFilePath); // 将图片文件给SubsamplingScaleImageView,这里注意设置ImageViewState设置初始显示比例 // ImageViewState的三个参数为:scale,center,orientation subsamplingScaleImageView.setImage(ImageSource.uri(Uri.fromFile(file)),new ImageViewState(1.0f, new PointF(0, 0), 0));
4.加载网络图片
subsampling-scale-image-view控件只能加载本地图片,但它能加载缓存里面的文件,所以通过Glide获取到缓存文件,再用它显示出来؏؏☝ᖗ乛◡乛ᖘ☝؏؏ 嫌缓存文件占存储空间,不用的时候删掉就是了呗,反正就一句话的事儿
为Glide添加依赖:
compile 'com.github.bumptech.glide:glide:3.7.0'
具体代码:
先用Glide获取到图片的硬盘缓存后,再用控件显示出来。
Glide.with(ActImage.this).load(图片网址).downloadOnly(new SimpleTarget<File>() { @Override public void onResourceReady(File resource, GlideAnimation<? super File> glideAnimation) { subsamplingScaleImageView.setImage(ImageSource.uri(resource.getAbsolutePath()), new ImageViewState(1.0f, new PointF(0, 0), 0)); } });
在退出此界面时,删除Glide缓存的图片硬盘文件。
private File imageCacheFile; imageCacheFile = resource; //清除Glide硬盘缓存的图片文件 if(imageCacheFile != null){ imageCacheFile.delete(); }
补充:
根据图片自身大小,计算其缩放比例,使其宽度与屏幕宽度一致;这样你在初次显示图片的时候就可以设置其与屏幕同宽了。
/** * 计算出图片初次显示需要放大倍数 * @param imagePath 图片的绝对路径 */ public float getInitImageScale(String imagePath){ Bitmap bitmap = BitmapFactory.decodeFile(imagePath); WindowManager wm = this.getWindowManager(); int width = wm.getDefaultDisplay().getWidth(); int height = wm.getDefaultDisplay().getHeight(); // 拿到图片的宽和高 int dw = bitmap.getWidth(); int dh = bitmap.getHeight(); float scale = 1.0f; //图片宽度大于屏幕,但高度小于屏幕,则缩小图片至填满屏幕宽 if (dw > width && dh <= height) { scale = width * 1.0f / dw; } //图片宽度小于屏幕,但高度大于屏幕,则放大图片至填满屏幕宽 if (dw <= width && dh > height) { scale = width * 1.0f / dw; } //图片高度和宽度都小于屏幕,则放大图片至填满屏幕宽 if (dw < width && dh < height) { scale = width * 1.0f / dw; } //图片高度和宽度都大于屏幕,则缩小图片至填满屏幕宽 if (dw > width && dh > height) { scale = width * 1.0f / dw; } return scale; }
把图片的最大放大比例设置为其填满屏幕宽度后再加2.0f;图片初次显示时从屏幕左上角开始显示,并且正好填满屏幕的宽度。
float initImageScale = getInitImageScale(saveFilePath); subsamplingScaleImageView.setMaxScale(initImageScale + 2.0f);//最大显示比例 subsamplingScaleImageView.setImage(ImageSource.uri(Uri.fromFile(file)),new ImageViewState(initImageScale, new PointF(0, 0), 0));
相关文章推荐
- 【Android】显示高清大图,可缩放类库 - SubsamplingScaleImageView(可用于做图片浏览器)使用说明
- Android大图加载,缩放,滑动浏览--SubsamplingScaleImageView 源码分析<一>大图加载
- android 加载类似长微博的超长图或超大图subsampling-scale-image-view
- Android加载/处理超大图片神器!SubsamplingScaleImageView(subsampling-scale-image-view)【系列1】
- android使用ImageView加载本地SdCard图片和加载网络图片
- Android加载/处理超大图片神器!SubsamplingScaleImageView(subsampling-scale-image-view)【系列1】
- 多个ImageView 加载高清大图的内存管理
- Android - 小功能 使用ImageView加载本地SdCard图片和加载网络图片
- 使用SDWebimage加载高清大图遇到内存警告的问题
- Android开发之-- SubsamplingScaleImageView加载长图并实现手势放大缩放
- Android加载/处理超大图片神器!SubsamplingScaleImageView(subsampling-scale-image-view)【系列1】
- android使用ImageView加载本地SdCard图片和加载网络图片
- android使用ImageView加载本地SdCard图片和加载网络图片
- Android webView 加载网页时,使用本地图片替换网页内的图片
- iOS webView加载本地html 调用 js,css (基本使用)
- imageview.scaletype ImageView的加载方式(转载)
- 使用sdWebImage实现对tableView的cell加载图片淡入淡出效果
- Android webView 加载网页时,使用本地图片替换网页内的图片
- ImageView的使用,实现本地图片的适屏显示和裁剪功能。
- IOS 多个UIImageView 加载高清大图时内存管理