我怀疑它的发生是因为未设置转换名称,但我无法检测到这是原因还是有其他原因或者我做错了什么或缺少什么,这是我的代码:
单击 recyclerview 项目时:我没有在绑定视图中设置转换名称,如果我这样做也不起作用
holder.iv.setTransitionName(MainActivity.position + "ZoomImage");
MainActivity.position = position;
ImagePagerFragment productDetailFragment = new ImagePagerFragment();
productDetailFragment.setEnterTransition(R.transition.image_shared_element_transition);
productDetailFragment.postponeEnterTransition();
getActive.getSupportFragmentManager()
.beginTransaction()
.setReorderingAllowed(true)
.addSharedElement(holder.iv, holder.iv.getTransitionName())
.replace(R.id.fragment, productDetailFragment)
.addToBackStack(null)
.commit();
在 ImagePagerFragment 中:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
prepareSharedElementTransition();
postponeEnterTransition();
}
准备SharedElementTransition();:
Transition transition =
TransitionInflater.from(getContext())
.inflateTransition(R.transition.image_shared_element_transition);
setSharedElementEnterTransition(transition);
setEnterTransition(transition);
setEnterSharedElementCallback(
new SharedElementCallback() {
@Override
public void onMapSharedElements(List<String> names, Map<String, View> sharedElements) {
Fragment currentFragment = (Fragment) viewPager.getAdapter()
.instantiateItem(viewPager, viewPager.getCurrentItem());
View view = currentFragment.getView();
if (view == null) {
return;
}
sharedElements.put(names.get(0), view.findViewById(R.id.image1));
}
});
viewpager 上的适配器仅返回一个片段 ImageFragment,在 picasso 成功回调中的 ImageFragment 中:
ivZoom.setTransitionName(MainActivity.position + "ZoomImage");
getParentFragment().startPostponedEnterTransition();
对于退出 ImageFragment 我有按钮单击:
close.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
getParentFragment().getFragmentManager().popBackStack();
ivZoom.getTransitionName();
}
}, 500);
}
});
并且退出时转换不起作用
recyclerview适配器的onBind:
Picasso.with(context)
.load(imageArrayList.get(position).getUrl())
// .networkPolicy(NetworkPolicy.OFFLINE)
.placeholder(R.drawable.loading_tall)
.fit().centerCrop()
.into(holder.iv, new com.squareup.picasso.Callback() {
@Override
public void onSuccess() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
// holder.iv.setTransitionName(MainActivity.position + "ZoomImage");
}
}
@Override
public void onError() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
// holder.iv.setTransitionName(MainActivity.position + "ZoomImage");
}
}
});