登录 立即注册
安币:

安卓巴士 - 安卓开发 - Android开发 - 安卓 - 移动互联网门户

显示超大尺寸的图片

[复制链接]
来自: MrlLee 分类: Android精品源码 上传时间: 2016-7-4 18:32:07
Tag:version package change Create Failed

项目介绍:

游客,如果您要查看本帖隐藏内容请回复


XImageView 可以显示超大尺寸的图片, 并支持缩放,双击放大, 拖动,单击,长按等手势操作, 支持惯性滑动, 支持ViewPager



欢迎使用



demo



这是一张 21250 x 7500 (1亿6千万像素)像素(121 MB), 加载需要30s 左右





这里可以下载这些大图 http://pan.baidu.com/s/1mhw6Qko



Usage



dependencies {
compile 'cn.kejin.ximageview:XImageView:1.2.2'
}


<cn.kejin.ximageview.XImageView
android:id="@+id/xImageView"
android:layout_height="match_parent"
android:layout_width="match_parent"
app:initType="fitViewMinImageMin"
app:doubleType="fitImageMinViewMax"/>


try {
mXImageView.setImage(getAssets().open("b.jpg"));
}
catch (IOException e) {
e.printStackTrace();
}


Details



属性 说明
[Java] 查看源文件 复制代码
initType
[Java] 查看源文件 复制代码
fitViewMin
默认为此类型 总是缩放适应View的最短的边长
[Java] 查看源文件 复制代码
fitViewMinImageMin
当图片的尺寸小于 view 的尺寸时, 不进行放大, 否则缩小至适应view的最短的边长
[Java] 查看源文件 复制代码
fitViewMax
TODO: 尚未实现 总是缩放适应View的最长的边长
[Java] 查看源文件 复制代码
fitImage
TODO: 尚未实现 图片有多大显示多大
[Java] 查看源文件 复制代码
doubleType
[Java] 查看源文件 复制代码
fitViewMinViewMax
默认为此种类型 缩小至 ViewMin, 放大至 ViewMax
[Java] 查看源文件 复制代码
fitImageMinViewMax
缩小至 Min(viewMin, imageMin), 放大至 viewMax
[Java] 查看源文件 复制代码
fitViewMinImageMax
TODO: 尚未实现 缩小至 viewMin, 放大至 Max(imageMax, Min(3 x imageMax, viewMax))
[Java] 查看源文件 复制代码
fitImageMinImageMax
TODO: 尚未实现 缩小至 Min(viewMin, imageMin), 放大至 Max(imageMax, Min(3 x imageMax, viewMax))


/**
* 初始化状态类型
*/
enum InitType {

/**
* 总是缩放到适应 view 的最小一边
* 默认为这种类型
*/
FIT_VIEW_MIN(1),

/**
* 总是缩放到适应 view 的最大一边
*/
FIT_VIEW_MAX(2),

/**
* 图片有多大就显示多大
*/
FIT_IMAGE(4),

/**
* 当图片小于 view 的最小边的时候, 不进行缩放, 按照 image 的尺寸显示,
* 如果大于view 的最小边就缩放至适应 view 的最小边
*/
FIT_VIEW_MIN_IMAGE_MIN(8)
}

/**
* 双击缩放类型
* 此处和 attrs.xml: doubleType 的value 保持一致
*/
enum DoubleType {
/**
* (默认为这种)
* 缩小至 viewMin
* 放大至 viewMax
*/
FIT_VIEW_MIN_VIEW_MAX(1),

/**
* 缩小至 Min(viewMin, imageMin)
* 放大至 viewMax
*/
FIT_IMAGE_MIN_VIEW_MAX(2),

/**
* 缩小至 viewMin
* 放大至 Max(imageMax, Min(3 x imageMax, viewMax))
*/
FIT_VIEW_MIN_IMAGE_MAX(3),

/**
* 缩小至 Min(viewMin, imageMin)
* 放大至 Max(imageMax, Min(3 x imageMax, viewMax))
*/
FIT_IMAGE_MIN_IMAGE_MAX(4);
}


XImageView 支持使用

[Java] 查看源文件 复制代码
FilePath, File, InputStream, Bitmap
来设置图片,
[Java] 查看源文件 复制代码
FilePath, File
会转换为
[Java] 查看源文件 复制代码
InputStream
,
在使用 Bitmap 设置图片时,要注意内存的消耗(因为内部会使用一个副本),
可以使用
[Java] 查看源文件 复制代码
setImage(bitmap, cache)
, 这个方法会把 Bitmap 转换为InputStream,再设置图片,不过这样会比较耗时!



void setImage(Bitmap bitmap)
void setImage(Bitmap bitmap, boolean cache);

// 默认的 Config 为 Bitmap.Config.RGB_565
void setImage(String path);
void setImage(String path, Bitmap.Config config);

void setImage(File file);
void setImage(File file, Bitmap.Config config);

void setImage(InputStream inputStream);
void setImage(InputStream is, Bitmap.Config config);

接口 说明
[Java] 查看源文件 复制代码
void setInitType(InitType type)
设置初始缩放类型
[Java] 查看源文件 复制代码
void setDoubleTapScaleType(DoubleType type)
设置双击缩放的缩放方式
[Java] 查看源文件 复制代码
void scaleImage(float dest, boolean smooth, int smoothTime);
以View的中心点为中心缩放, 缩放的目标倍数是以当前的显示的尺寸来计算的(比如 dest=1.1, 则会在当前的显示的基础上放大0.1倍)
[Java] 查看源文件 复制代码
void scaleImage(int cx, int cy, float dest, boolean smooth, int smoothTime)
以一点为中心缩放图片, (cx,cy) 中心点, dest 缩放的目标倍数,以当前的倍数来计算,smooth 是否使用动画, smoothTime 动画时间
[Java] 查看源文件 复制代码
void scaleToMaxFitView(int cx, int cy, boolean smooth, int smoothTime)
缩放到最大适应View(就是图片宽高 >= View的宽高)
[Java] 查看源文件 复制代码
void scaleToMinFitView(int cx, int cy, boolean smooth, int smoothTime)
缩放到最小适应View (就是图片宽高 <= View的宽高)
[Java] 查看源文件 复制代码
int scrollImage(int dx, int dy)
滑动图片, 返回当前已经到达的边界
[Java] 查看源文件 复制代码
BitmapManager.NONE
[Java] 查看源文件 复制代码
LEFT
[Java] 查看源文件 复制代码
RIGHT
[Java] 查看源文件 复制代码
TOP
[Java] 查看源文件 复制代码
BOTTOM
, (dx, dy) 相对滑动的像素, 当滑动这个图片,如果已经到达了左边的边界, 已经不能再继续向右滑动,则
[Java] 查看源文件 复制代码
scrollImage()
[Java] 查看源文件 复制代码
LEFT
, 如果这个图片左边和上边都已经不能继续滑动,则会返回
[Java] 查看源文件 复制代码
LEFT | RIGHT
[Java] 查看源文件 复制代码
float getScaleFactor()
获取当前图片的缩放的倍数,相对图片的原始图片的尺寸来说的
[Java] 查看源文件 复制代码
Rect getRealImageRect()
获取真实图片的尺寸,注意最好在 onSetImageFinished() 之后获取这个值
[Java] 查看源文件 复制代码
Rect getShowImageRect()
获取当前图片显示出来的的尺寸
[Java] 查看源文件 复制代码
boolean isSettingImage()
判断是否正在设置图片


监听单击, 双击, 长按, 和 设置完成 事件, 如果需要监听

[Java] 查看源文件 复制代码
onSetImageFinished()
, 需要在
[Java] 查看源文件 复制代码
setImage()
之前设置这个监听



// 监听单击, 双击, 长按, 和 设置完成 事件
mXImageView.setActionListener(new XImageView.OnActionListener()
{
@Override
public void onSingleTapped(XImageView view, MotionEvent event, boolean onImage)
{
}

@Override
public boolean onDoubleTapped(XImageView view, MotionEvent event)
{
return false; // 返回 true 表示已经处理了双击事件, 不会进行缩放操作
}

@Override
public void onLongPressed(XImageView view, MotionEvent event)
{
}

@Override
public void onSetImageFinished(XImageView view, boolean success, Rect image)
{
}
});

// 如果不想监听这么多, 可以使用 XImageView.SimpleActionListener

相关源码推荐:

我来说两句
*滑动验证:
所有评论(59)
humanboy 2016-7-4 22:55:01
mark,收藏了
回复
葫芦_eRDJw 2016-7-4 23:54:40
写的真的很不错
回复
tintins 2016-7-5 00:53:45
膜拜大神~
回复
fancy 2016-7-5 01:41:48
相当不错,感谢无私分享精神!
回复
深思 2016-7-5 02:16:44
不错不错,楼主辛苦了。。。
回复
tylz 2016-7-5 03:25:33
不错不错,楼主辛苦了。。。
回复
孙林 2016-7-5 09:17:06
感谢分享,安卓巴士有你更精彩:)
回复
562 1 0
代码贡献英雄榜
用户名 下载数
联系我们
首页/微信公众账号投稿

帖子代码编辑/版权问题

QQ:435399051,769657487

如何获得代码达人称号

如何成为签约作者

联系我们
关闭
合作电话:
13802416937
Email:
[email protected]
商务市场合作/投稿
问题反馈及帮助
联系我们

广告投放| 申请友链|手机版|站点统计|安卓巴士 ( 粤ICP备15117877号 )

快速回复 返回顶部 返回列表