图片放大

2,196 阅读1分钟
原文链接: www.jianshu.com

zoom_mulit_view.gif


zoom_single_view.gif

github地址:ZoomView

想要使用当前动画需要对Theme进行设置
true

Gradle

Add it in your root build.gradle at the end of repositories:

allprojects {
    repositories {
        ...
        maven { url "https://jitpack.io" }
    }
}

Step 2. Add the dependency

dependencies {
        compile 'com.github.lvmaomao:ZoomView:0.0.1'
}

图片放大:放大动画,滑动关闭

ImageView的放大利用的就是ActivityOptions类,其中关键的两个元素transitionViewtransitionName 将前后Activity元素设置相同就可以进行放大和缩小的位移动画了。

使用方法

ViewerActivity是图片展示的activity,需要在AndroidManifest.xml中注册;

单个ImageView放大

TransitionSingleHelper 针对单个View的辅助类,首先在当前页面进行初始化

TransitionSingleHelper singleHelper;
singleHelper = new TransitionSingleHelper();

需要配置当前页面的transitionViewTransitionName

setExitSharedElementCallback(singleHelper.sharedElementCallback);

跳转的时候直接执行startViewerActivity,犹豫图片放大基本都是网络图片,所以直接将transitionName设置成了url;

singleHelper.startViewerActivity(OneActivity.this, v, url);

多个ImageView放大

其实多个图片与单个图片主要的不同就是返回缩略图时候transitionView和transitionName的同步问题,返回之后我们需要更新一下,我还是将主要的代码贴出。

private TransitionMultiHelper multiHelper;
multiHelper = new TransitionMultiHelper();
setExitSharedElementCallback(helper.sharedElementCallback);

重点的地方来了,我们需要复写Activity下的onActivityReenter()方法,当前方法下我们可以拿到放大页面中更改后的transitionView和transitionName;

@Override
    public void onActivityReenter(int resultCode, Intent data) {
        super.onActivityReenter(resultCode, data);
        multiHelper.update(data, new TransitionMultiHelper.UpdateTransitionListener() {
            @Override
            public View updateView(int position) {
                return ViewGroup.getImageView(position);
            }

            @Override
            public String updateName(int position) {
                return Urls.get(position);

            }
        });
    }

最后就是打开新页面的方法也不同, 将url替换成了ArrayList 并且增加了一个Index,为了选择url和设置viewPager

multiHelper.startViewerActivity(TwoActivity.this, view, (ArrayList) Urls, index);