2015-10-27 18 views
12

Attualmente sto creando un'app per Android in cui qualcuno può inserire il proprio nome, premere un pulsante e quindi restituire loro il proprio nome.Android: Ripple Background Programmaticamente

Un effetto che vorrei ottenere con questo è un effetto in cui, dopo aver premuto il pulsante, l'input e il pulsante scompariranno (completa questo bit fino ad ora), e quindi il colore di sfondo della vista di MainActivity farà un'increspatura (dal centro) con un nuovo colore, cambiando infine il colore dello sfondo completo.

Come faccio a fare questo in modo programmatico, dal momento che sono in grado di trovare solo tutorial per aggiungere increspature ai pulsanti quando vengono spinti?

+0

Impostazione taglia in 3 ore. – SysVoid

+0

Puoi per favore mostrare cosa hai provato? – KishuDroid

+0

Niente. Non so da dove iniziare. Sono alle prime armi su Android-y. – SysVoid

risposta

5

EDIT:

Ho testato questo facendo una piccola applicazione

Prima di tutto nascondere la vista che si desidera rivelare in questa animazione.

La vista può essere dello stesso layout e in XML sua visibilità dovrebbe essere invisibile modo che l'animazione rivelare esso.

È possibile impostare l'altezza e la larghezza di vista partita genitore se si desidera creare un schermo intero animazione ...

prendere la vostra vista originale e rivelare sia in cornice layout di

Nel mio caso, ho usato questo:

<FrameLayout 
      android:layout_width="match_parent" 
      android:layout_height="match_parent"> 

      <TextView android:text="Hello World!"      
       android:layout_width="wrap_content" 
       android:textSize="20sp" 
       android:layout_height="wrap_content" /> 
      <LinearLayout 
      xmlns:android="http://schemas.android.com/apk/res/android" 
      android:orientation="vertical" android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:background="@color/colorPrimaryDark" 
      android:id="@+id/revealiew" 
      android:visibility="invisible" 
      > 
</FrameLayout> 

poi nella vostra attività sul button click o qualche evento fare questo:

fab.setOnClickListener(new View.OnClickListener() { 
      @TargetApi(Build.VERSION_CODES.LOLLIPOP) 
      @Override 
      public void onClick(View view) { 
       // previously invisible view 
       View myView = findViewById(R.id.revealview); 

// get the center for the clipping circle 
       int cx = myView.getWidth()/2; 
       int cy = myView.getHeight()/2; 

// get the final radius for the clipping circle 
       int finalRadius = Math.max(myView.getWidth(), myView.getHeight()); 

// create the animator for this view (the start radius is zero) 
       Animator anim = 
         ViewAnimationUtils.createCircularReveal(myView, cx, cy, 0, finalRadius); 

       //Interpolator for giving effect to animation 
       anim.setInterpolator(new AccelerateDecelerateInterpolator()); 
       // Duration of the animation 
       anim.setDuration(1000); 

// make the view visible and start the animation 
       myView.setVisibility(View.VISIBLE); 
       anim.start(); 
      } 
     }); 
    } 

Attached GIF for your reference

Si può prendere sguardo dettagliato alla documentazione ufficiale qui: http://developer.android.com/training/material/animations.html

+0

Hai provato questo? Potresti includere la gif animata che ho richiesto all'interno del bounty? – SysVoid

+0

Ho provato questo e aggiornato la mia risposta, –

+0

Purtroppo, non mi permette di scegliere la tua risposta come il vincitore di taglie più. O anche lasciandomi dare + 25 rep. – SysVoid

5

Quello che stai descrivendo è uno reveal effect sullo sfondo.

Dal documento ufficiale si possono trovare pronto per l'uso esempi:

1) Ecco come rivelare una vista in precedenza invisibile utilizzando rivelare effetto:

// previously invisible view 
View myView = findViewById(R.id.my_view); 

// get the center for the clipping circle 
int cx = myView.getWidth()/2; 
int cy = myView.getHeight()/2; 

// get the final radius for the clipping circle 
int finalRadius = Math.max(myView.getWidth(), myView.getHeight()); 

// create the animator for this view (the start radius is zero) 
Animator anim = 
    ViewAnimationUtils.createCircularReveal(myView, cx, cy, 0, finalRadius); 

// make the view visible and start the animation 
myView.setVisibility(View.VISIBLE); 
anim.start(); 

2) Ecco come nascondere una vista precedentemente visibile utilizzando l'effetto di rivelazione:

// previously visible view 
final View myView = findViewById(R.id.my_view); 

// get the center for the clipping circle 
int cx = myView.getWidth()/2; 
int cy = myView.getHeight()/2; 

// get the initial radius for the clipping circle 
int initialRadius = myView.getWidth(); 

// create the animation (the final radius is zero) 
Animator anim = 
    ViewAnimationUtils.createCircularReveal(myView, cx, cy, initialRadius, 0); 

// make the view invisible when the animation is done 
anim.addListener(new AnimatorListenerAdapter() { 
    @Override 
    public void onAnimationEnd(Animator animation) { 
     super.onAnimationEnd(animation); 
     myView.setVisibility(View.INVISIBLE); 
    } 
}); 

// start the animation 
anim.start(); 

Nell'app, è possibile utilizzare un livello di sfondo colorato (invisibile all'inizio) e quindi utilizzare l'effetto di rivelazione su di esso.

+0

Ottima risposta. Lo farò provare stasera (quando posso accedere ad AS) e contrassegnarlo come risposta se funziona. – SysVoid

+0

Lo sto provando attivamente, la ricompensa verrà assegnata entro i prossimi 10-15 minuti. – SysVoid

+0

Sembra non animare, ma piuttosto semplicemente farlo apparire. Come hai il tuo XML in un esempio come questo? – SysVoid

-1

controllare questo sito, "Ripple Android Background" è una libreria per farlo e il min sdk è di 11 (Android 3.0 Honeycomb)
https://android-arsenal.com/details/1/1107

+0

Giù votato. Non hai mai tentato di seguire le regole della taglia. – SysVoid