2016-06-09 9 views
2

Ich habe mehrere Anwendungen gesehen, die reibungslos ihre Indikatorfarbe (auch Symbole!) Auf Registerkarte Swipe zum Beispiel Facebook ändern.Android - Smooth Übergang der TabLayout Indikatorfarbe auf Folie zwischen den Tabs

Dies ist, wie ich es in meiner app tun:

tabLayout.setOnTabSelectedListener(
     new TabLayout.ViewPagerOnTabSelectedListener(searchViewPager) { 
      @Override 
      public void onTabSelected(TabLayout.Tab tab) { 
       super.onTabSelected(tab); 
       tabLayout.setSelectedTabIndicatorColor(getResources().getColor(indicatorColors[tab.getPosition()])); 
      } 
     }); 

Wo indicatorColors ist ein Array von normaler Farbe und damit es ändert sich nur, wenn der Benutzer auf eine Registerkarte klaut vollständig oder wählen Sie die Registerkarte. Ich brauche den Übergang hier.

Was kann ich tun, um einen reibungslosen Farbübergang von einer Farbe zu einer anderen Farbe auf der Registerkarte Swipe zu erhalten?

TabLayout ist mit einem ViewPager gekoppelt.

+0

ich es nicht versucht hätte. Aber ich denke, das kann erreicht werden, indem ein ScrollListener auf dem TabLayout oder dem ViewPager gesetzt wird. –

+0

Hmm Ich habe gerade 'setOnScrollChangeListener' überprüft, ja, es kann durch hier gemacht werden, aber es benötigt API min 23 und ich benutze API min 17 .. Irgendwelche andere Möglichkeit? –

+0

Ich denke, das wird helfen: http://Stackoverflow.com/a/14111712/5460053 –

Antwort

0

Bitte versuchen Sie es.

...onCreate(){ 

... 
tabHost.setOnTabChangedListener(new OnTabChangeListener() { 

@Override 
public void onTabChanged(String arg0) { 

    setTabColor(tabHost); 
} 
}); 
setTabColor(tabHost); 

... }

//Change The Backgournd Color of Tabs 

public void setTabColor(TabHost tabhost) { 

    for(int i=0;i<tabhost.getTabWidget().getChildCount();i++) { 
    tabhost.getTabWidget().getChildAt(i).setBackgroundColor(COLOR_CYAN); 
    } 

    //unselected 

    if(tabhost.getCurrentTab()==0){ 
      tabhost.getTabWidget().getChildAt(tabhost.getCurrentTab()).setBackgroundColor(COLOR_RED); //1st tab selected 
    } else { 
      tabhost.getTabWidget().getChildAt(tabhost.getCurrentTab()).setBackgroundColor(COLOR_BLUE); //2nd tab selected 
    } 
} 
+0

Dies ist fast genau das gleiche was ich gerade mache .. Aber das ist auf Registerkarte geändert .. Und nicht mit 'TabLayout' –

+0

Ok . Dann erkläre bitte, was das Problem ist. – Phoenix

+0

Also verwende ich 'TabLayout' und möchte einen weichen Farbübergang von einer Registerkarte zu einer anderen Registerkarte hinzufügen, zum Beispiel:' hellblau' zu 'blau' zu' dunkelblau' (stell dir Verlaufsfarbe vor) während du von Tab 'gleitest 0 'bis Tab' 1 ', was ich habe, ist jetzt' hellblau 'bis' dunkelblau '. –