Android使用SubsamplingScaleImageView完美查看超大图片

  • 一、目标
  • 二、体验地址
  • 三、实现方案
    • 1. SubsamplingScaleImageView
    • 2. OnStateChangedListener
    • 3. setDoubleTapZoomScale
  • 四、Finally

一、目标

在神马笔记中查看《溪山清远图》。

二、体验地址

神马笔记最新版本下载:【神马笔记 版本2.2.0——功能优化.apk

三、实现方案

1. SubsamplingScaleImageView

在《Android加载超大图片》一文中,我们已经介绍过SubsamplingScaleImageView的基础用法。

这里结合SubsamplingScaleImageView的功能来提高图片浏览体验。

2. OnStateChangedListener

使用OnStateChangedListener可以监听到SubsamplingScaleImageView的缩放和移动事件。

2D图片有3个维度的操作:

  1. 位置——移动图片
  2. 大小——缩放图片
  3. 角度——旋转图片

SubsamplingScaleImageView不支持第3个维度——角度。

因此只有移动和缩放2个事件。

通过OnStateChangedListener,我们可以实现当用户进行缩放或者移动,或者2者同时发生时,自动全屏。

全屏之后,图片变不会被菜单栏所遮挡,可以看到全部图片。

/*** An event listener, allowing activities to be notified of pan and zoom events. Initialisation* and calls made by your code do not trigger events; touch events and animations do. Methods in* this listener will be called on the UI thread and may be called very frequently - your* implementation should return quickly.*/
@SuppressWarnings("EmptyMethod")
public interface OnStateChangedListener {/*** The scale has changed. Use with {@link #getMaxScale()} and {@link #getMinScale()} to determine* whether the image is fully zoomed in or out.* @param newScale The new scale.* @param origin Where the event originated from - one of {@link #ORIGIN_ANIM}, {@link #ORIGIN_TOUCH}.*/void onScaleChanged(float newScale, int origin);/*** The source center has been changed. This can be a result of panning or zooming.* @param newCenter The new source center point.* @param origin Where the event originated from - one of {@link #ORIGIN_ANIM}, {@link #ORIGIN_TOUCH}.*/void onCenterChanged(PointF newCenter, int origin);}

3. setDoubleTapZoomScale

通过setDoubleTapZoomScale接口,可以设置双击图片的缩放系数。

因为SubsamplingScaleImageView初始显示时,使整张图片居中显示。即最长的一边完全显示在屏幕内。

因此,我们设置双击图片时,将最短的一边完全显示在屏幕内。

并且当长宽比一致时,设置为2倍大小。

static float getDoubleTapScale(int width, int height, int viewWidth, int viewHeight) {if (viewWidth <= 0 || viewHeight <= 0) {return 1;}float sx = viewWidth * 1.f / width;float sy = viewHeight * 1.f / height;float scale = Math.max(sx, sy);if (Math.abs(sx - sy) < Float.MIN_NORMAL) {scale = 2 * sx;}return scale;
}

四、Finally

~倚遍阑干~只是无情绪~

Android使用SubsamplingScaleImageView完美查看超大图片相关推荐

  1. Android加载/处理超大图片神器!SubsamplingScaleImageView(subsampling-scale-image-view)【系列1】...

     Android加载/处理超大图片神器!SubsamplingScaleImageView(subsampling-scale-image-view)[系列1] Android在加载或者处理超大巨 ...

  2. Android加载/处理超大图片神器!SubsamplingScaleImageView(subsampling-scale-image-view)【系列1】

     Android加载/处理超大图片神器!SubsamplingScaleImageView(subsampling-scale-image-view)[系列1] Android在加载或者处理超大巨 ...

  3. 【Android】Android开发启动app弹出一张广告图片,Dialog可以查看大图,查看某个图片功能...

    作者:程序员小冰,GitHub主页:https://github.com/QQ986945193 新浪微博:http://weibo.com/mcxiaobing 首先给大家看一下我们今天这个最终实现 ...

  4. 安卓直接展示html,Android textView展示html图片,实现图文混排,点击查看大图片

    Android textView展示html图片,实现图文混排,点击查看大图片 最近要展示html在textView上,实现图文混排,并且图片可以点击放大,所以去研究了一下,效果图如下: 我们知道te ...

  5. Android点击WebView中的图片查看大图

    Android点击WebView中的图片查看大图 WebView加载Html文本加载图片并同时实现获取图片下标 首先加载html文本 web_view.loadDataWithBaseURL(null ...

  6. android heic图片,如何在安卓上查看HEIC图片的内容?

    原标题:如何在安卓上查看HEIC图片的内容? 一般我们手机拍摄的照片格式是JPG,在任何软件上都可以查看,但是自iOS11更新以后,苹果手机默认的照片格式是HEIC,不论是在常见的电脑上还是安卓手机上 ...

  7. android查看cpu信息,Android使用adb命令查看CPU信息

    Android中使用JNI编程的时候会需要编译出不同的SO文件,以供适配不同的机型. 例如: 由此需要查看不同机型的CPU信息. 使用ADB命令查看CPU信息命令如下: 1. adb shell 2. ...

  8. 超大图片的显示:BitmapRegionDecoder 1

    不少安卓开发者都有图片加载的处理经验,比如通过压缩节省图片加载中对内存的消耗. 我们经常做的是把一张1280之类大小的图片以适应屏幕大小的尺寸展现出来,同时能够通过缩放来观察. 不过这是一般水平,通过 ...

  9. Android 从 Android 本地图库选择多个图片

    原文地址 本文说明如何从 Android 本地图库选择多个图片.作者考虑很多解决方案. 演示从 Android 本地图库选择多个图片,有两个方法可以实现从图库中选择多个图片: 用 Intent 获取多 ...

  10. 【Android 安装包优化】WebP 图片格式性能测试 ( 测试 WebP 图片解码速度 | 测试 WebP 图片编码速度 )

    文章目录 一.测试 WebP 图片解码速度 二.测试 WebP 图片编码速度 三.参考资料 测试结果 : WebP 格式图片 , 解码快 , 编码慢 , 占用空间小 ; 在解码速度上 , WebP 格 ...

最新文章

  1. 监控神器Prometheus用不对,也就是把新手村的剑
  2. VMware Workstation 9下基于Ubuntu 12.10服务器版本的Hadoop集群的配置
  3. python培训班哪些比较好-哪家python培训班比较好?2018年如何选择
  4. 2017年第10批 手机号正则表达式
  5. 形象解释Momentum
  6. 数据结构与算法 | 栈
  7. idea jar包导入_IDEA 实用功能Auto Import:自动优化导包(自动删除、导入包)
  8. 中继代理 server2008R2
  9. 高级定时器的各种框图和HAL库重要结构
  10. Recoil 是 React 的状态管理库
  11. 萌新如何写出一篇优质观点类新媒体文章?
  12. Python_Pandas_分组汇总数据和创建数据透视表
  13. opencv实践中遇到的问题
  14. Spring源码学习(十八)---基于注解配置Aop的aspectj-autoproxy解析
  15. Summary——CrowdPose: Efficient Crowded Scenes Pose Estimation and A New Benchmark
  16. 天猫双十一红包口令玩法
  17. 根据面阵相机拍摄的速度和传送带运动的速度将拍摄的实物图片的每一帧进行无缝拼接使其成为一张完整的图片的全部流程以及c++代码
  18. Attention注意力机制–原理与应用
  19. 小米2s 用线刷,刷回MIUI V5了
  20. 使用KeePass管理密码

热门文章

  1. Centos 7硬盘扩容
  2. C++自学历程——启程篇
  3. 移动联通基站定位API以及电信基站定位API
  4. U盘引导网络安装CentOS 7
  5. 利用Google快讯和GoogleReader收集信息
  6. 【研一周小结】第三周个人学习总结
  7. 路由器网速测试用哪个软件,怎么测网速比较准确,测试网速最准确的办法
  8. matlab plotyy 标注,Matlab关于plotyy 标注 legend 的问题
  9. 【一起学系列】之迭代器组合:虽然有点用不上啦
  10. 2022 人工智能 AI 应用 top6