pagerslidingtabstrip - Android SlidingTabLayout smooth transition/animation while changing tab doesn't work inside a Fragment -
i'm using google's slidingtablayout class. problem inside activities i've used tabs, there smooth transition while changing tabs. however, same thing doesn't happen if switch same tabs inside fragment. :(. can issue be?
in fragment class, use code initialize slidingtab.
slidingtablayout slidingtablayout = (slidingtablayout) view.findviewbyid(r.id.sliding_tabs); slidingtablayout.setcustomtabview(r.layout.tab_layout, r.id.tab_layout_icon); slidingtablayout.setselectedindicatorcolors(getresources().getcolor(r.color.mycolor)); slidingtablayout.setdistributeevenly(true); slidingtablayout.setviewpager(mpager); and slidingtablayout class.
public class slidingtablayout extends horizontalscrollview { private static final int title_offset_dips = 24; private static final int tab_view_padding_dips = 16; private static final int tab_view_text_size_sp = 12; private final slidingtabstrip mtabstrip; private int mtitleoffset; private context context; private int mtabviewlayoutid; private int mtabviewtextviewid; private boolean mdistributeevenly; private intent intent; private viewpager mviewpager; private sparsearray<string> mcontentdescriptions = new sparsearray<string>(); private viewpager.onpagechangelistener mviewpagerpagechangelistener; private boolean loaded = false; public slidingtablayout(context context) { this(context, null); } public slidingtablayout(context context, attributeset attrs) { this(context, attrs, 0); } public slidingtablayout(context context, attributeset attrs, int defstyle) { super(context, attrs, defstyle); this.context = context; this.intent = intent; // disable scroll bar sethorizontalscrollbarenabled(false); // make sure tab strips fills view setfillviewport(true); mtitleoffset = (int) (title_offset_dips * getresources().getdisplaymetrics().density); mtabstrip = new slidingtabstrip(context); addview(mtabstrip, layoutparams.match_parent, layoutparams.wrap_content); } // /** // * set custom {@link com.google.samples.apps.iosched.ui.widget.slidingtablayout.tabcolorizer} used. // * // * if require simple custmisation can use // * {@link #setselectedindicatorcolors(int...)} achieve // * similar effects. // */ public void setcustomtabcolorizer(tabcolorizer tabcolorizer) { mtabstrip.setcustomtabcolorizer(tabcolorizer); } public void setdistributeevenly(boolean distributeevenly) { mdistributeevenly = distributeevenly; } /** * sets colors used indicating selected tab. these colors treated * circular array. providing 1 color mean tabs indicated same color. */ public void setselectedindicatorcolors(int... colors) { mtabstrip.setselectedindicatorcolors(colors); } // /** // * set {@link viewpager.onpagechangelistener}. when using {@link com.google.samples.apps.iosched.ui.widget.slidingtablayout} // * required set {@link viewpager.onpagechangelistener} through method. // * layout can update it's scroll position correctly. // * // * @see viewpager#setonpagechangelistener(viewpager.onpagechangelistener) // */ public void setonpagechangelistener(viewpager.onpagechangelistener listener) { mviewpagerpagechangelistener = listener; } /** * set custom layout inflated tab views. * * @param layoutresid layout id inflated * @param textviewid id of {@link textview} in inflated view */ public void setcustomtabview(int layoutresid, int textviewid) { mtabviewlayoutid = layoutresid; mtabviewtextviewid = textviewid; } /** * sets associated view pager. note assumption here pager content * (number of tabs , tab titles) not change after call has been made. */ public void setviewpager(viewpager viewpager) { mtabstrip.removeallviews(); mviewpager = viewpager; if (viewpager != null) { viewpager.setonpagechangelistener(new internalviewpagerlistener()); final sharedpreferences prefs = context.getsharedpreferences("userprofiledata", context.mode_private); string profileinfo = prefs.getstring("profiledata", null); populatetabstripparent(); } } /** * create default view used tabs. called if custom tab view not set via * {@link #setcustomtabview(int, int)}. */ protected textview createdefaulttabview(context context) { textview textview = new textview(context); textview.setgravity(gravity.center); textview.settextsize(typedvalue.complex_unit_sp, tab_view_text_size_sp); textview.settypeface(typeface.default_bold); textview.setlayoutparams(new linearlayout.layoutparams( viewgroup.layoutparams.match_parent, viewgroup.layoutparams.wrap_content)); typedvalue outvalue = new typedvalue(); getcontext().gettheme().resolveattribute(android.r.attr.selectableitembackground, outvalue, true); textview.setbackgroundresource(outvalue.resourceid); textview.setallcaps(true); int padding = (int) (tab_view_padding_dips * getresources().getdisplaymetrics().density); textview.setpadding(padding, padding, padding, padding); return textview; } public void populatetabstripparent() { final pageradapter adapter = mviewpager.getadapter(); final view.onclicklistener tabclicklistener = new tabclicklistener(); view tabview = null; (int = 0; < adapter.getcount(); i++) { linearlayout.layoutparams layoutparams = new linearlayout.layoutparams(viewgroup.layoutparams.match_parent, viewgroup.layoutparams.match_parent, 1.0f); tabview = layoutinflater.from(getcontext()).inflate(r.layout.tab_layout, mtabstrip, false); imageview iconimageview = (imageview) tabview.findviewbyid(r.id.tab_layout_icon); iconimageview.setimagedrawable(getcontext().getresources().getdrawable(integer.parseint((string) adapter.getpagetitle(i)))); if (mviewpager.getcurrentitem() == i) { //iconimageview.setselected(true); } tabview.setonclicklistener(tabclicklistener); mtabstrip.addview(tabview, layoutparams); } } @override protected void onattachedtowindow() { super.onattachedtowindow(); if (mviewpager != null) { scrolltotab(mviewpager.getcurrentitem(), 0); } } private void scrolltotab(int tabindex, int positionoffset) { final int tabstripchildcount = mtabstrip.getchildcount(); if (tabstripchildcount == 0 || tabindex < 0 || tabindex >= tabstripchildcount) { return; } view selectedchild = mtabstrip.getchildat(tabindex); if (selectedchild != null) { int targetscrollx = selectedchild.getleft() + positionoffset; if (tabindex > 0 || positionoffset > 0) { // if we're not @ first child , mid-scroll, make sure obey offset targetscrollx -= mtitleoffset; } scrollto(targetscrollx, 0); } } // /** // * allows complete control on colors drawn in tab layout. set // * {@link #setcustomtabcolorizer(com.google.samples.apps.iosched.ui.widget.slidingtablayout.tabcolorizer)}. // */ public interface tabcolorizer { /** * @return return color of indicator used when {@code position} selected. */ int getindicatorcolor(int position); } private class internalviewpagerlistener implements viewpager.onpagechangelistener { private int mscrollstate; @override public void onpagescrolled(int position, float positionoffset, int positionoffsetpixels) { int tabstripchildcount = mtabstrip.getchildcount(); if ((tabstripchildcount == 0) || (position < 0) || (position >= tabstripchildcount)) { return; } mtabstrip.onviewpagerpagechanged(position, positionoffset); view selectedtitle = mtabstrip.getchildat(position); if (position == 0) selectedtitle.setselected(true); else mtabstrip.getchildat(0).setselected(false); int extraoffset = (selectedtitle != null) ? (int) (positionoffset * selectedtitle.getwidth()) : 0; scrolltotab(position, extraoffset); if (mviewpagerpagechangelistener != null) { mviewpagerpagechangelistener.onpagescrolled(position, positionoffset, positionoffsetpixels); } } @override public void onpagescrollstatechanged(int state) { mscrollstate = state; if (mviewpagerpagechangelistener != null) { mviewpagerpagechangelistener.onpagescrollstatechanged(state); } } @override public void onpageselected(int position) { int tabstripchildcount = mtabstrip.getchildcount(); if ((tabstripchildcount == 0) || (position < 0) || (position >= tabstripchildcount)) { return; } (int = 0; < mtabstrip.getchildcount(); i++) { mtabstrip.getchildat(i).setselected(false); } view selectedtitle = mtabstrip.getchildat(position); selectedtitle.setselected(true); if (mscrollstate == viewpager.scroll_state_idle) { mtabstrip.onviewpagerpagechanged(position, 0f); scrolltotab(position, 0); } if (mviewpagerpagechangelistener != null) { mviewpagerpagechangelistener.onpageselected(position); } if (mscrollstate == viewpager.scroll_state_idle) { mtabstrip.onviewpagerpagechanged(position, 0f); scrolltotab(position, 0); } if (mviewpagerpagechangelistener != null) { mviewpagerpagechangelistener.onpageselected(position); } } } private class tabclicklistener implements onclicklistener { @override public void onclick(view v) { (int = 0; < mtabstrip.getchildcount(); i++) { if (v == mtabstrip.getchildat(i)) { mviewpager.setcurrentitem(i); return; } } } }
mviewpager.setadapter(new samplefragmentpageradapter( getchildfragmentmanager(), getactivity())); you have use getchildfragmentmanager() instead of getfragmentmanager(). that's all, buddy.
Comments
Post a Comment