我的Android笔记--简单的图片查看器实现思路
来源:互联网 发布:c 程序员发展方向 编辑:程序博客网 时间:2024/06/15 16:20
思路
很多应用都用到了图片查看器,在网上也可以找到很多成熟的图片查看器类。这里记录一下我对于简单图片查看器的实现方法,自定义一个继承ImageView的类,下面称为GIV,主要在代码中处理以下三点。
1、图片的初始位置。
2、捕捉用户手势
3、手势判别和处理
初始位置
首先,我们需要处理ImageView中图片的初始位置。还有,GIV的ScaleType必须是Matrix。
通常来说GIV直接布置在一个页面的FrameLayout或者RelativeLayout中,由于使用了Matrix的缩放模式,图像的边界起点位于屏幕左上角,我们在图像初始加载以后,需要对GIV中的图像使用矩阵进行处理,将图像的内容缩放和移动到屏幕的相对中心位置。
完成这步操作,有三个要点。
获取一个空的Matrix实例mMatrix,对其进行以下操作
1、移动图像到屏幕中间,使用Matrix.postTransalte(x,y)方法设置mMatrix。
2、获取GIV中图像的绝对宽度和高度,可以使用getDrawable().getIntrinsicWidth()和getDrawable().getIntrinsicgHeight()来获取。对比屏幕宽高以后,设置缩放比。使用Matrix.postScale(scalX,scalY,pointX,pointY)方法来对GIV图像内容进行缩放,scalX和scalY代表X和Y方向的缩放比例,pointX和pointY代表缩放中心点。
3、调用setImageMatirx(mMatrix)便可将图像移动到屏幕中间
手势捕捉
重写ImageView的onTouchEvent(MotionEvent)方法,返回值设为true。方法主要处理手势的down,up,move和point_up事件,这个图片查看器只支持双点缩放,和单点拖拽,对于图像的拖拽、缩放位置的限制,在GIV类中还做了进一步处理。
另,当GIV使用在ViewPager中时,我参考网友的分享,直接自定义一个ViewPager解决这个问题,代码中可以看到。
手势处理
主要需要和GIV中图像的矩形范围做对比,然后再来判断是否需要移动或者缩放图像内容。GIV图像矩形范围可以根据GIV当前的矩阵mMatrix,通过以下方法来获取。 /**
* 返回Drawable的矩形
*
* @return imageView矩形数据
*/
private RectF getImageRectF() {
RectF rect = new RectF();
Drawable d = getDrawable();
if (d != null) {
rect.set(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());
mMatrix.mapRect(rect);
}
return rect;
}
下面是我的自定义的图片查看器
源码和参考
在我源码里面有较为详细的注释
我的源码链接
参考文章1
参考文章2
- 我的Android笔记--简单的图片查看器实现思路
- 网络图片查看器的简单实现
- jquery实现简单的图片查看器
- 简单图片查看器的实现
- Android之---RecycleView实现简单的图片查看功能(类似相册查看器)
- core java 8 学习笔记(一) 一个简单的图片查看器的实现
- 点击发送后图片查看大图的实现思路
- 基于jQuery的一个简单的图片查看器实现
- android下简单的网络图片查看器
- Android最简单的图片点击放大查看器
- [Android开发笔记]网络图片查看器的完成
- android实验二 图片查看器的设计与实现
- Android gallery+BaseAdapter实现简易的图片查看器
- Android Wifi密码查看器实现思路
- Android 在网上查看图片(最简单的版本)
- android studio for android learning (十三) 一个简单的图片查看器示例
- Android - 异步下载图片的简单实现
- android实现简单的图片上传服务器
- LightOJ1215 Finding LCM
- bzoj 3065 带插入区间K小值
- Windows中的SAM文件
- LNMP1.3 phpMyAdmin 打开空白的问题
- 广播机制及Receiver用法学习教程
- 我的Android笔记--简单的图片查看器实现思路
- H5案例分享:使用JS判断客户端、浏览器、操作系统类型
- Shader 使用UsePass
- 给自己的话
- BAT笔试
- C++ vector用法
- 二两橙子的前端之路--利用for循环完成九九乘法口诀
- Elasticsearch安装IK分词器
- 一个操作系统的实现:关于ALIGN的若干解释