У меня есть 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();
В адаптере viewpager, который расширяет FragmentStatePagerAdapter, возвращая фрагмент 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();
}
});
хорошо, пытаюсь, а как насчет этого: getActivity (). supportStartPostponedEnterTransition (); это не так?
это правильно, отложите и дождитесь загрузки изображения, затем начните снова - это правильный путь
так что мне все еще нужно «Вызовите его, когда ImageView будет создан в вашем адаптере ViewPager»?
Нет разницы...




Я думаю, вам следует установитьTransitionName для ViewPager во втором действии. Предыдущее представление будет связано с viewPager. Если вы позвоните
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
imageView.setTransitionName(MainActivity.position + "ImageZoom");
}
после успешной (или неудачной) загрузки изображения переход завершен и работать не будет.
как насчет этого: getActivity (). supportStartPostponedEnterTransition (); Я отложил, а затем, когда загрузка изображения начала переход
Вместо вызова
setTransitionNameпосле успешной загрузки Пикассо. Вызовите его, когдаImageViewбудет создан в вашем адаптереViewPager