java - Merge PageViewer fragments on rotation from vertical to horizontal -
i'm working on android application displays 2 images in separate fragments using pageviewer. wondering how can possibly merge 2 fragments same screen, or place them side side on rotation of screen. similar first image below, expect due page rotation, , not device type:
ideally, merge 2 images onto 1 fragment if fit. should done using if statement? code i'm using similar android screen slide demo:
main activity:
package com.example.android.animationsdemo; import android.app.fragment; import android.app.fragmentmanager; import android.content.intent; import android.os.bundle; import android.support.v13.app.fragmentstatepageradapter; import android.support.v4.app.fragmentactivity; import android.support.v4.app.navutils; import android.support.v4.view.pageradapter; import android.support.v4.view.viewpager; import android.view.menu; import android.view.menuitem; /** * demonstrates "screen-slide" animation using {@link viewpager}. because {@link viewpager} * automatically plays such animation when calling {@link viewpager#setcurrentitem(int)}, there * isn't animation-specific code in sample. * * <p>this sample shows "next" button advances user next step in wizard, * animating current screen out (to left) , next screen in (from right). * reverse animation played when user presses "previous" button.</p> * * @see screenslidepagefragment */ public class screenslideactivity extends fragmentactivity { /** * number of pages (wizard steps) show in demo. */ private static final int num_pages = 5; /** * pager widget, handles animation , allows swiping horizontally access previous * , next wizard steps. */ private viewpager mpager; /** * pager adapter, provides pages view pager widget. */ private pageradapter mpageradapter; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_screen_slide); // instantiate viewpager , pageradapter. mpager = (viewpager) findviewbyid(r.id.pager); mpageradapter = new screenslidepageradapter(getfragmentmanager()); mpager.setadapter(mpageradapter); mpager.setonpagechangelistener(new viewpager.simpleonpagechangelistener() { @override public void onpageselected(int position) { // when changing pages, reset action bar actions since dependent // on page active. alternative approach have each // fragment expose actions (rather activity exposing actions), // simplicity, activity provides actions in sample. invalidateoptionsmenu(); } }); } @override public boolean oncreateoptionsmenu(menu menu) { super.oncreateoptionsmenu(menu); getmenuinflater().inflate(r.menu.activity_screen_slide, menu); menu.finditem(r.id.action_previous).setenabled(mpager.getcurrentitem() > 0); // add either "next" or "finish" button action bar, depending on page // selected. menuitem item = menu.add(menu.none, r.id.action_next, menu.none, (mpager.getcurrentitem() == mpageradapter.getcount() - 1) ? r.string.action_finish : r.string.action_next); item.setshowasaction(menuitem.show_as_action_if_room | menuitem.show_as_action_with_text); return true; } @override public boolean onoptionsitemselected(menuitem item) { switch (item.getitemid()) { case android.r.id.home: // navigate "up" demo structure launchpad activity. // see http://developer.android.com/design/patterns/navigation.html more. navutils.navigateupto(this, new intent(this, mainactivity.class)); return true; case r.id.action_previous: // go previous step in wizard. if there no previous step, // setcurrentitem nothing. mpager.setcurrentitem(mpager.getcurrentitem() - 1); return true; case r.id.action_next: // advance next step in wizard. if there no next step, setcurrentitem // nothing. mpager.setcurrentitem(mpager.getcurrentitem() + 1); return true; } return super.onoptionsitemselected(item); } /** * simple pager adapter represents 5 {@link screenslidepagefragment} objects, in * sequence. */ private class screenslidepageradapter extends fragmentstatepageradapter { public screenslidepageradapter(fragmentmanager fm) { super(fm); } @override public fragment getitem(int position) { return screenslidepagefragment.create(position); } @override public int getcount() { return num_pages; } } } screenslidefragment
package com.example.android.animationsdemo; import android.app.fragment; import android.os.bundle; import android.view.layoutinflater; import android.view.view; import android.view.viewgroup; import android.widget.textview; /** * fragment representing single step in wizard. fragment shows dummy title indicating * page number, along dummy text. * * <p>this class used {@link cardflipactivity} , {@link * screenslideactivity} samples.</p> */ public class screenslidepagefragment extends fragment { /** * argument key page number fragment represents. */ public static final string arg_page = "page"; /** * fragment's page number, set argument value {@link #arg_page}. */ private int mpagenumber; /** * factory method fragment class. constructs new fragment given page number. */ public static screenslidepagefragment create(int pagenumber) { screenslidepagefragment fragment = new screenslidepagefragment(); bundle args = new bundle(); args.putint(arg_page, pagenumber); fragment.setarguments(args); return fragment; } public screenslidepagefragment() { } @override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); mpagenumber = getarguments().getint(arg_page); } @override public view oncreateview(layoutinflater inflater, viewgroup container, bundle savedinstancestate) { // inflate layout containing title , body text. viewgroup rootview = (viewgroup) inflater .inflate(r.layout.fragment_screen_slide_page, container, false); // set title view show page number. ((textview) rootview.findviewbyid(android.r.id.text1)).settext( getstring(r.string.title_template_step, mpagenumber + 1)); return rootview; } /** * returns page number represented fragment object. */ public int getpagenumber() { return mpagenumber; } } any ideas how this?
1) have viewpager
2) set adapter viewpager
public class imagefragmentadapter extends fragmentpageradapter{ arraylist<string> images; public imagefragmentadapter(fragmentmanager fm, arraylist<string> images) { super(fm); this.images = images; } @override public fragment getitem(int position) { imagefragment fragment = new imagefragment(); bundle bundle = new bundle(); bundle.putstring("image_url", images.get(position)); fragment.setarguments(bundle); return fragment; } @override public int getcount() { return images.size(); } } 3) each fragment image
public class imagefragment extends fragment{ view view; imageview ivimage; bundle bundle; string imageurl; @override public view oncreateview(layoutinflater inflater, @nullable viewgroup container, @nullable bundle savedinstancestate) { view = inflater.inflate(r.layout.fragment_image, null); ivimage = (imageview)view.findviewbyid(r.id.ivimagealbum); bundle = getarguments(); if(bundle != null){ imageurl = bundle.getstring("image_url"); try{ imageloader.getinstance().displayimage(imageurl, ivimage, imageloadoption.options); } catch(exception ex){ ex.printstacktrace(); } } return view; } 4) using imageloader or picaso image lib show image hope you
Comments
Post a Comment