2017-10-16 5 views

Antwort

0

Ich denke, es gibt keine dynamischen Themen gibt es angewandt zu werden. Jedes Fragment innerhalb von viewpager hat seine Elemente zuvor thematisch abhängig. Wenn Sie wissen möchten, wie die Toolbar-Animation ausgeführt wird, kann ich einen Ansatz vorschlagen, der Ihnen das gleiche Ergebnis liefert.

Play Store Layout

<Toolbar> 
    <FrameLayout> 
     <RelativeLayout id="toolbarContainer"> 
     </RelativeLayout> 
     <RelativeLayout id="revealContainer"> 
     </RelativeLayout> 
     <TabLayout></TabLayout> 
    </FrameLayout> 
</Toolbar> 
<StoreView></StoreView><!-- This is where you see viewpager fragments --> 

Der Prozess wird sein:

  • Sie starten Circular Reveal Animation auf revealContainer innerhalb onPageSelected Ihrer OnPageChangeListener.
  • Am Ende der Animation setzen Sie den Hintergrund des toolbarContainer.
  • ausblenden die revealContainer

Der Code so etwas wie dieses

viewPager.setOnPageChangeListener(new OnPageChangeListener() { 
public void onPageScrollStateChanged(int state) {} 
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {} 
public void onPageSelected(int position) { 
// new position of page 
showRevealEffectForPage(position); 
} 
}); 

private void showRevealEffectForPage(int page) { 
int color; 
switch(page) { 
case 0: 
color = Color.parseColor("#fff"); //white 
break; 
default: 
color = Color.parseColor("#000"); //black 
break; 
} 

//set color before animation starts 
revealContainer.setBackgroundColor(color); 

int x = revealContainer.getRight(); 
int y = revealContainer.getBottom(); 

int startRadius = 0; 
int endRadius = (int) Math.hypot(toolbarContainer.getWidth(), toolbarContainer.getHeight()); 

Animator anim = ViewAnimationUtils.createCircularReveal(revealContainer, x, y, startRadius, endRadius); 

layoutButtons.setVisibility(View.VISIBLE); 
// you can set animation listener here to check for when the animation ends by 

anim.setAnimationListener(new Animation.AnimationListener() { 
    @Override 
    public void onAnimationStart(Animation animation) { 

    } 

    @Override 
    public void onAnimationEnd(Animation animation) { 
//set the color of toolbarContainer 
toolbarContainer.setBackgroundColor(color); 
revealContainer.setVisibility(View.INVISIBLE); 
    } 

    @Override 
    public void onAnimationRepeat(Animation animation) { 

    } 
}); 

anim.start(); 
} 
+0

Vielen Dank für Ihre Antwort – antia

+0

@codekidX glaube ich nicht, dass es die Elemente ist einfach Thematisierung aussehen würde. Wenn es nur das wäre, würde sich die Primärfarbe nicht ändern, aber wenn du den Bildschirm "Letzte" öffnest, hat die Titelleistenfarbe des Playstores die gleiche Farbe wie der Tab, der du bist. Das kann nur bedeuten, dass sich die Grundfarbe wirklich ändert. Ich weiß nicht, wie es geht, aber ich suche auch eine Antwort –

+0

@LuccasClezar Ich nehme setTheme (R.style.YourTheme); _ [innerhalb dessen colorPrimary anders ist] _ heißt. Dies wird wahrscheinlich eingestellt, nachdem die Registerkarte geändert wurde. – codekidX