具有2个活动的共享元素交易

时间:2018-07-18 12:25:25

标签: android android-recyclerview android-viewpager android-animation

我有2个活动,其中一个 activity_1 我有带图片的RecyclerView,而 activity_2 有有图像的分页器。我只想从 activity_1 回收者视图到 ctivity_2 viewpager图像中执行图像共享元素事务,如图所示。 enter image description here

除交易外,一切正常。 请帮助

活动_2代码

     int position = getIntent().getIntExtra(TestActivity.EXTRA_POSITION, 1);
        ArrayList<AnimalItem> filelist = (ArrayList<AnimalItem>) getIntent().getSerializableExtra(TestActivity.EXTRA_ANIMAL_ARRAYLIST);
        ViewPager viewPager = findViewById(R.id.animal_view_pager);
        MyCustomPagerAdapter myCustomPagerAdapter = new MyCustomPagerAdapter(PageViewerActivity.this, filelist);
//        myCustomPagerAdapter.getItem(position).setTransitionName(getResources().getString(R.string.transition_contenet_topic));
        viewPager.setAdapter(myCustomPagerAdapter);
        viewPager.setCurrentItem(position);

CustomPageAdapter.class

public class MyCustomPagerAdapter extends PagerAdapter {
        private Context context;
        private ArrayList<AnimalItem> images;
        private LayoutInflater layoutInflater;


        public MyCustomPagerAdapter(Context context, ArrayList<AnimalItem> images) {
            this.context = context;
            this.images = images;
            layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        }

        @Override
        public int getCount() {
            return images.size();
        }

        @Override
        public boolean isViewFromObject(View view, Object object) {
            return view == ((LinearLayout) object);
        }

        @Override
        public Object instantiateItem(@NonNull ViewGroup container, final int position) {
            View itemView = layoutInflater.inflate(R.layout.test_image_card, container, false);

            ImageView imageView =itemView.findViewById(R.id.id_main_image);
            Picasso.with(context).load(images.get(position).imageUrl).into(imageView);

            container.addView(itemView);

            //listening to image click
            imageView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Toast.makeText(context, "you clicked image " + (position + 1), Toast.LENGTH_LONG).show();
                }
            });

            return itemView;
        }

        @Override
        public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
            container.removeView((LinearLayout) object);
        }
    }

活动_1 (在回收站项目上,点击代码)

Intent intent = new Intent(this, PageViewerActivity.class);
    intent.putExtra(EXTRA_POSITION,pos);
    intent.putExtra(EXTRA_ANIMAL_ARRAYLIST, Utils.generateAnimalItems(getApplicationContext()));
    intent.putExtra(EXTRA_ANIMAL_IMAGE_TRANSITION_NAME, ViewCompat.getTransitionName(sharedImageView));
    ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(this,
            sharedImageView,
            ViewCompat.getTransitionName(sharedImageView));
    startActivity(intent, options.toBundle());

1 个答案:

答案 0 :(得分:0)

您可以使用一项活动来实现此目标,然后将activity_1#RecyclerView的查看项视为FlipView,并在flipView imageViewviewPager的顶部以及以翻转动作为{ {1}}和imageView

viewPager
Implementation  'eu.davidea:flipview:1.1.3'