加载高清大图(本地、在线)---使用subsampling-scale-image-view
来源:互联网 发布:推荐系统算法模型 编辑:程序博客网 时间:2024/04/30 01:14
参考学习网址:
关于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));
阅读全文
0 0
- 加载高清大图(本地、在线)---使用subsampling-scale-image-view
- Android加载/处理超大图片神器!SubsamplingScaleImageView(subsampling-scale-image-view)【系列1】
- Android加载/处理超大图片神器!SubsamplingScaleImageView(subsampling-scale-image-view)【系列1】
- AsyncLoadLocalImage ios 加载本地高清大图
- Android SubsamplingScaleImageView(subsampling-scale-image-view)单双击长按事件【系列2】
- Android 加载高清大图
- 使用SDWebimage加载高清大图遇到内存警告的问题
- android自定义view查看高清移动大图
- 通过webView全屏加载高清大图片,解决不能全屏高清加载图片问题
- UIImageView 加载高清大图时内存管理
- 一招解决Android 加载高清大图
- 多个ImageView 加载高清大图的内存管理
- Android 高清加载长图或大图方案
- Android中加载高清大图及图片压缩方式
- RunLoop UITableViewCell加载高清大图的速度优化
- Android_性能优化ViewPager加载高清大图oom解决方案
- 将View转换为Image保持高清
- Runloop加载本地大图
- 学习日记12/5——加入Capstone第一天
- a标签传值,Java接值乱码
- Capstone训练营第一天
- 2017/12/5 开课第一堂
- 使用postman快速建立MOCK使用篇
- 加载高清大图(本地、在线)---使用subsampling-scale-image-view
- Test
- [HAOI2006]受欢迎的牛
- Windows 源码编译Hadoop 2.7.4生成X64
- Maven生成可以直接运行的jar包的多种方式
- PHP获取二维数组中某一列的值集合
- vfscanf用法解析
- apache 配置
- S32K144 EVB之FTM