共享元素转换伴随着闪烁

时间:2018-05-22 08:53:46

标签: java android android-animation android-transitions shared-element-transition

点击其项目后,我有了recyclelerview,我打开了一个包含共享元素转换的活动:

Intent myIntent = new Intent(getActive, EnlargeActivity.class);
            myIntent.putExtra("IMAGE_URL", imageArrayList.get(position).getUrl());
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                holder.iv.setTransitionName(String.valueOf(MainActivity.position + "ZoomImage"));
                ActivityOptionsCompat options = ActivityOptionsCompat.
                        makeSceneTransitionAnimation(getActive,
                                holder.iv,
                                ViewCompat.getTransitionName(holder.iv));

                context.startActivity(myIntent, options.toBundle());

在活动中它有viewpager:

 super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_enlarge);


    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        getWindow().setEnterTransition(null);
    }

    supportPostponeEnterTransition();

在viewpager适配器中,它扩展了FragmentStatePagerAdapter,返回一个片段ProductDetailViewPagerFragment,它有一个imageview,我正在加载如下图像:( MainActivity.position是recyclerview的位置)

Picasso.with(getActivity())
            .load(url)
            .into(imageView, new Callback() {
                @Override
                public void onSuccess() {
                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                        imageView.setTransitionName(MainActivity.position + "ImageZoom");
                    }

                    getActivity().supportStartPostponedEnterTransition();
                }

                @Override
                public void onError() {
                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                        imageView.setTransitionName(MainActivity.position + "ImageZoom");
                    }

                    getActivity().supportStartPostponedEnterTransition();
                }
            });

1 个答案:

答案 0 :(得分:0)

我认为你应该在第二个活动中为ViewPager设置transTransitionName。上一个视图将与viewPager连接。 如果你打电话

 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                    imageView.setTransitionName(MainActivity.position + "ImageZoom");
  }

图像加载成功(或失败)后,转换结束,它将无法正常工作。