i'm in desperat need help, hold on hats, because here go:
i have 2 activity's need transition between. each activity contains viewpager , each viewpager has pageradapter who's responsible creating fragment's can swip between.
in activity a have fragment contains 1 large imageview
in activity b have fragment containt recyclergridview, contains grid of imageview's.
so transition wanna archive:
activity a -> pageradapter -> fragment -> imageview
activity b -> pageradapter -> fragment -> recyclerview -> imageview
i know have use postponeentertransition();
, startpostponedentertransition();
can't figure out when call startpostponedentertransition();
timing right.
activity a start activity b
intent intent = new intent(this, pagesoverviewactivity.class); if (build.version_codes.lollipop <= build.version.sdk_int) { final pagerecyclingimageview pagerecyclingimageview = ((pagedetailfragment) madapter.getfragment(mpager.getcurrentitem())).getpagerecyclingimageview(); activityoptions options = activityoptions.makescenetransitionanimation(pageactivity.this, pagerecyclingimageview, "page_number_" + getcurrentpagenumber()); startactivity(intent, options.tobundle()); }
oncreate in activity b call postponetransition , create pageradapter called pagesoverviewfragmentadapter
protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); postponeentertransition(); ... mfragmentadapter = new pagesoverviewfragmentadapter(getsupportfragmentmanager(), sections, getapplicationcontext()); mviewpager.setadapter(mfragmentadapter);
in pagesoverviewfragmentadapter.getitem()
create fragment's contains recyclerview
public class pagesoverviewfragmentadapter extends fragmentpageradapter { @override public fragment getitem(int position) { pagesoverviewfragment fragment = pagesoverviewfragment.newinstance(); return fragment; }
in pagesoverviewfragment create adapter, pagesoverviewadapter recyclerview
public class pagesoverviewfragment extends fragment { @override public view oncreateview(layoutinflater inflater, viewgroup container, bundle savedinstancestate) { view view = inflater.inflate(r.layout.pages_overview_fragment_layout, container, false); mrecyclerview = (recyclerview) view.findviewbyid(r.id.pages_overview_recycler_view); mrecyclerview.setlayoutmanager(new gridlayoutmanager(getactivity(), 2)); madapter = new pagesoverviewadapter(msection, getactivity()); mrecyclerview.setadapter(madapter); return view;
finally inside pagesoverviewadapter create imageview wanna make transition , call startpostponedentertransition
when hit imageview wanna animate to.
@override public void onbindviewholder(final pagesoverviewviewholder holder, int position) { int leftpageposition; leftpageposition = msection.getfirstpage(); if (build.version_codes.lollipop <= build.version.sdk_int) { holder.mleftcardview.settransitionname("page_number_" + leftpageposition); } glide.with(mcontext).load(getlocalpathtofile(leftpageposition)).placeholder(r.drawable.card_cover_placeholder).into(holder.mleftcardview); holder.mleftcardview.settext(mcontext.getstring(r.string.page, leftpageposition)); if (leftpageposition == 4) { //hardcode position 4 test. holder.mleftcardview.getviewtreeobserver().addonpredrawlistener(new viewtreeobserver.onpredrawlistener() { @override public boolean onpredraw() { mactivity.startpostponedentertransition(); holder.mleftcardview.getviewtreeobserver().removeonpredrawlistener(this); return false; } }); } }
wall of text should done now!
here video of looks in app:
http://www.youtubeslow.com/watch?v=crdrjdty43o
can see transition work's when press button, both imageview have correct transition name, when start activity b imageview goes wrong position in recyclerview.
if have idea how solve this, i'll find , hug you!