9宫格转场动画实现

https://s27.aconvert.com/convert/p3r68-cdx67/0hhta-ufe70.gif

现在在展示页面经常是这种转场动画的效果,直接上代码

界面A 在转上界面B 的时候

先看下跳转界面的代码

package com.example.hubenkui.myapplication;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.ActivityOptionsCompat;
import android.support.v4.app.FragmentActivity;
import android.view.View;
import android.widget.ImageView;

import java.util.List;
import java.util.Map;

public class MainActivity extends FragmentActivity {
    private String name = "name";
    private ImageView mImageView;

    @Override
    protected void onCreate(final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mImageView = (ImageView) findViewById(R.id.icon_image);
        mImageView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent =new Intent(MainActivity.this,SecondActivity.class);
                MainActivity.this.startActivity(intent,
                         ActivityOptionsCompat.makeSceneTransitionAnimation(MainActivity.this, v, name).toBundle());
            }
        });

        setExitSharedElementCallback(new android.support.v4.app.SharedElementCallback() {
            @Override
            public void onMapSharedElements(List names, Map sharedElements) {
               // super.onMapSharedElements(names, sharedElements);
                names.clear();
                sharedElements.clear();
                sharedElements.put("name",mImageView);
            }
        });


    }

    @Override
    public void onActivityReenter(int resultCode, Intent data) {
        super.onActivityReenter(resultCode, data);
    }


}

这里在跳出的时候调用  

setExitSharedElementCallback

我们看下跳如的B页面的代码

package com.example.hubenkui.myapplication;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.SharedElementCallback;
import android.view.View;
import java.util.List;
import java.util.Map;

public class SecondActivity extends FragmentActivity {
       private View mImageView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
        mImageView = findViewById(R.id.icon_image);
        setEnterSharedElementCallback(new SharedElementCallback() {
            @Override
            public void onMapSharedElements(List names, Map sharedElements) {
                names.clear();
                sharedElements.clear();
                sharedElements.put("name",mImageView);
            }
        });
    }
    @Override
    public void onBackPressed() {
        Intent intent = new Intent();
        setResult(Activity.RESULT_OK, intent);
        supportFinishAfterTransition();
    }



}

在两个界面之间跳转的时候,涉及到数据的传递,在A 界面跳转到B 界面的时候,最好用到startActivity 去传递结果值,

B 页面消失的时候,会执行

 Intent intent = new Intent();
        setResult(Activity.RESULT_OK, intent);
        supportFinishAfterTransition();

在A 页面中接受B 返回的数据,在方法


    @Override
    public void onActivityReenter(int resultCode, Intent data) {
        super.onActivityReenter(resultCode, data);
    }

获取到Intent data 中的值

你可能感兴趣的:(android-view)