模仿微信图片放大页功能以及进入退出效果
类似微信图片放大页的进出动画、图片预览支持图片手势缩放、拖拽等操作,基于ImageViewer微修改,修复了一处崩溃,一处体验
效果:



自定义属性
属性名 |
描述 |
ivr_show_index |
是否显示图片位置 |
ivr_do_enter |
是否开启进场动画 |
ivr_do_exit |
是否开启退场动画 |
ivr_duration |
进场与退场动画的执行时间 |
ivr_do_drag |
是否允许图片拖拽 |
ivr_drag_type |
拖拽模式(classic:今日头条效果 |
自定义方法
方法名 |
描述 |
setStartPosition(int position) |
设置开始展示的图片的位置 |
setImageData(List list) |
设置图片资源 |
setViewData(List list) |
设置目标 view 的相关数据 |
setImageLoader(ImageLoader loader) |
设置图片加载类 |
showIndex(boolean show) |
是否显示图片索引 |
doDrag(boolean isDo) |
是否允许图片被拖拽 |
setDragType(@ImageDraggerType int type) |
设置拖拽模式 |
doEnterAnim(boolean isDo) |
是否开启进场动画 |
doExitAnim(boolean isDo) |
是否开启退场动画 |
setDuration(int duration) |
设置打开和关闭的动画执行时间 |
setOnImageChangedListener(OnImageChangedListener listener) |
设置图片切换监听 |
setOnItemClickListener(OnItemClickListener listener) |
设置图片的单击击监听 |
setOnItemLongClickListener(OnItemLongClickListener listener) |
设置图片的长按击监听 |
setOnPreviewStatusListener(OnPreviewStatusListener listener) |
设置图片预览状态监听 |
watch() |
开启图片预览 |
close() |
关闭图片预览 |
clear() |
清除所有数据 |
getViewState() |
获取图片预览器的当前状态 |
setImageScaleable(boolean scaleable) |
是否允许图片缩放 |
isImageScaleable() |
图片是否可缩放 |
getImageScale() |
获取图片当前的缩放等级 |
setImageMaxScale |
设置图片的最大缩放等级 |
getImageMaxScale() |
获取图片的最大缩放等级 |
setImageMinScale(float minScale) |
设置图片的最小缩放等级 |
getImageMinScale() |
获取图片的最小缩放等级 |
getCurrentView() |
获取当前 Item 的视图 |
getCurrentPosition() |
获取当前图片的位置 |
onKeyDown(int keyCode, KeyEvent event) |
返回键监听(使用方法见demo) |
简单示例
XML 中添加 ImageViewer
<com.liyi.viewer.widget.ImageViewer
android:id="@+id/imagePreivew"
android:layout_width="match_parent"
android:layout_height="match_parent" />
代码中设置 WXZoomView
// 图片浏览的起始位置
imageViewer.setStartPosition(position);
// 图片的数据源
imageViewer.setImageData(mImageList);
// 目标 View 的位置以及尺寸等信息
imageViewer.setViewData(mViewDatas);
// 自定义图片的加载方式
imageViewer.setImageLoader(new ImageLoader() {
@Override
public void displayImage(final int position, Object src, final ImageView view) {
Glide.with(SimplePreviewActivity.this)
.load(src)
.into(new SimpleTarget<Drawable>() {
@Override
public void onLoadStarted(@Nullable Drawable placeholder) {
super.onLoadStarted(placeholder);
view.setImageDrawable(placeholder);
}
@Override
public void onLoadFailed(@Nullable Drawable errorDrawable) {
super.onLoadFailed(errorDrawable);
view.setImageDrawable(errorDrawable);
}
@Override
public void onResourceReady(Drawable resource, Transition<? super Drawable> transition) {
view.setImageDrawable(resource);
mViewDatas.get(position).setImageWidth(resource.getIntrinsicWidth());
mViewDatas.get(position).setImageHeight(resource.getIntrinsicHeight());
}
});
}});
// 开启图片浏览
imageViewer.watch();
代码传送门:
WXZoomView