代码之家  ›  专栏  ›  技术社区  ›  blackHawk

共享元素转换伴随闪烁

  •  0
  • blackHawk  · 技术社区  · 6 年前

    我有一个recyclerview,单击它的项,我打开一个共享元素转换的活动,如下所示:

    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();
    

    在扩展FragmentStatePageRadapter的ViewPager适配器中,返回具有ImageView的Fragment ProductDetailViewPagerFragment,并且正在加载类似以下图像:(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 回复  |  直到 6 年前
        1
  •  0
  •   Nha Phạm Thị    6 年前

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

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

    图像加载成功(或失败)后,转换完成,将不工作。