# ZoomPreviewPicture
**Repository Path**: JHFreedm/ZoomPreviewPicture
## Basic Information
- **Project Name**: ZoomPreviewPicture
- **Description**: 仿微信朋友圈 转场动画
- **Primary Language**: Unknown
- **License**: GPL-3.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2017-09-25
- **Last Updated**: 2020-12-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# ZoomPreviewPicture
本项目受Google官方demo Zooming a View 启发,实现了点击小图放大至全屏预览,退出全屏恢复至原来位置这两个过程的动画过渡。
常见应用场景如微信朋友圈照片九宫格和微信聊天图片预览,某些手机系统相册等viewpager图片查看 缩放 拖拽下拉缩小退出(效果同微信图片浏览)
### 特点
* 1.支持自定义图片加载框架,
* 2.支持重写activity,完成切换切换效果
* 3.图片查看 缩放 拖拽下拉缩小退出
* 4.支持自定义activity内容
* 5.支持类似微信朋友圈照片九宫格和微信聊天图片预览,只要你中图片已经说支持。
* 6.指示器类型选择 [圆点模式(贝塞尔圆点指示器)](https://github.com/yanyiqun001/bannerDot)和数字模式
####效果如下:

通过Gradle抓取:
```
repositories {
jcenter()
maven { url "https://jitpack.io" }
}
```
```grade
compile 'com.ycjiang:imgepreviewlibrary:1.0.8'
```
```Maven
com.ycjiang
loadviewhelper
1.0.8
pom
```
### 1.项目类库依赖项目
```
compile 'com.github.chrisbanes.photoview:library:1.3.1'
compile 'com.android.support:support-v4:25.3.1'
```
### 2.示例代码
使用方式
```
GPreviewBuilder.from(RecycleViewActivity.this)
.setData(mThumbViewInfoList)
.setCurrentIndex(position)
.setSingleFling(true)
.setType(GPreviewBuilder.IndicatorType.Number)
.start();
```
````
//mRecyclerView item点击事件
mRecyclerView.addOnItemTouchListener(new OnItemClickListener() {
@Override
public void SimpleOnItemClick(BaseQuickAdapter baseQuickAdapter, View view, int position) {
//在你点击时,调用computeBoundsBackward()方法
computeBoundsBackward(mGridLayoutManager.findFirstVisibleItemPosition());
GPreviewBuilder.from(RecycleViewActivity.this)
.setData(mThumbViewInfoList)
.setCurrentIndex(position)
.setType(GPreviewBuilder.IndicatorType.Number)
.start();
}
});
/**
** 查找信息
* 从第一个完整可见item逆序遍历,如果初始位置为0,则不执行方法内循环
*/
private void computeBoundsBackward(int firstCompletelyVisiblePos) {
for (int i = firstCompletelyVisiblePos;i < mThumbViewInfoList.size(); i++) {
View itemView = mGridLayoutManager.findViewByPosition(i);
Rect bounds = new Rect();
if (itemView != null) {
ImageView thumbView = (ImageView) itemView.findViewById(R.id.iv);
thumbView.getGlobalVisibleRect(bounds);
}
mThumbViewInfoList.get(i).setBounds(bounds);
}
}
````
### 3.使用自定义图片加载配置 **注意这个必须实现哦。不然加载**
* 1在你项目工程,创建一个类 实现接口IZoomMediaLoader接口 如下代码
demo 采用glide ,可以使用Picassor Imagloader 图片加载框架
````
public class TestImageLoader implements IZoomMediaLoader {
@Override
public void displayImage(Fragment context, String path, final MySimpleTarget simpleTarget) {
Glide.with(context)
.load(path)
.asBitmap()
.centerCrop()
.error(R.drawable.ic_ssss)
.into(new SimpleTarget() {
@Override
public void onResourceReady(Bitmap resource, GlideAnimation super Bitmap> glideAnimation) {
simpleTarget.onResourceReady(resource);
}
@Override
public void onLoadStarted(Drawable placeholder) {
super.onLoadStarted(placeholder);
simpleTarget.onLoadStarted();
}
@Override
public void onLoadFailed(Exception e, Drawable errorDrawable) {
super.onLoadFailed(e, errorDrawable);
simpleTarget.onLoadFailed(errorDrawable);
}
});
}
@Override
public void onStop(@NonNull Fragment context) {
Glide.with(context).onStop();
}
@Override
public void clearMemory(@NonNull Context c) {
Glide.get(c).clearMemory();
}
````
* 2注册 你实现自定义类,在你 app onCreate() 中
````
@Override
public void onCreate() {
super.onCreate();
ZoomMediaLoader.getInstance().init(new TestImageLoader());
}
````
### 4.自定义Activity
实现业务自己逻辑操作,例如返回按钮toolbar 实现getViewPager 切换动画等等
~~~
public class CustomActivity extends GPreviewActivity {
/***
* 重写该方法
* 使用你的自定义布局
**/
@Override
public int setContentLayout() {
return R.layout.activity_custom_preview;
}
Toolbar toolbar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
toolbar= (Toolbar) findViewById(R.id.toolbar);
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//退出时调用,d封装方法的 不然没有动画效果
transformOut();
}
});
}
~~~
* 布局文件
````
````
>注意:
>>
>>1. **自定义使用布局时,不在子类使用setContentView()方法**
>>2. **你在Activity 重写 setContentLayout(),返回你的自定义布局**
>>3. **在你布局内容 使用include layout="@layout/activity_image_preview_photo" 预览布局添加你布局中**
>>4. **GPreviewBuilder 调用 from()方法后,调用to();指向你.to(CustomActivity.class)自定义预览activity**
>>5. **别忘了在AndroidManifest activity 使用主题**
>> 示例:
#### [九宫格图片控件来自laobie](https://github.com/laobie/NineGridImageView)
### 升级日志
####1.0.8
* 1.完善自定义预览实现步骤,让自定义更简洁
#### 1.0.7
* 1.修复双手缩放失效问题
#### 1.0.6
* 1.修改启动预览activity启动方式 采用GPreviewBuilder 链接调用
* 2.增加指示器类型选择 [圆点(贝塞尔圆点指示器)](https://github.com/yanyiqun001/bannerDot)和数字模式
* 3.升级[PhotoView版本1.3.1](https://github.com/chrisbanes/PhotoView/)
* 4.设置最小版本15
#### 1.0.4
* 1.修复占位图错位问题
* 2.支持色值和svg 等矢量图。
* 3.优化bitmap使用
#### 1.0.3
* 1 移除Glide 类库依赖,使用自定义图片加载框架
* 2 增加自定义配置接口,实现即可完成自定义加载框架
* 3 修复占位图,因错误问题
* 4 修改包名路径,分类
#### 1.0.2
* 1 增加自定义Activity实现实现getViewPager 切换动画
#### 1.0.1
* 发布第一版