2012-07-10 12 views
5

Attualmente sto lavorando sugli effetti di transizione per la mia finestra di dialogo. Si prega di fare riferimento all'immagine qui sotto: enter image description hereDialog Transition Effects

L'animazione di ingresso per il mio dialogo dovrebbe essere al centro. Mentre l'animazione di uscita dovrebbe essere da metà a cima. Sto usando le seguenti animazioni XML, ma sfortunatamente non funzionano.

slide_down.xml

<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android"> 
<translate android:fromYDelta="100%p" android:toYDelta="0" 
android:duration="1000"/> 
</set> 

slide_up.xml

<?xml version="1.0" encoding="utf-8"?> 
<translate xmlns:android="http://schemas.android.com/apk/res/android" 
android:fromYDelta="0%p" android:toYDelta="50%p" 
android:duration="1000"/> 

EDIT: Questo non è un normale Dialog. Si tratta di un activity applicato con una Theme.Dialog nel AndroidManifest.xml

+0

Come stai applicando queste animazioni? – Joru

+0

Penso che se apri "Attività di dialogo", questa transizione è semplice da implementare. –

+0

cosa stai usando? DialogFragment? incolla il codice dove applichi le transizioni e commetti la transazione per favore. –

risposta

1

se si sta creando la finestra di dialogo come attività allora si può seguire questo approccio

È possibile creare le classi di animazione:

public class DropDownToMiddleAnimation extends Animation { 
    public int height, width; 

    @Override 
    public void initialize(int width, int height, int parentWidth, 
      int parentHeight) { 
     // TODO Auto-generated method stub 
     super.initialize(width, height, parentWidth, parentHeight); 
     this.width = width; 
     this.height = height; 
     setDuration(500); 
     setFillAfter(true); 
     setInterpolator(new LinearInterpolator()); 
    } 

    Camera camera = new Camera(); 

    @Override 
    protected void applyTransformation(float interpolatedTime, Transformation t) { 
     // TODO Auto-generated method stub 
     super.applyTransformation(interpolatedTime, t); 

     Matrix matrix = t.getMatrix(); 
     camera.save(); 

     camera.getMatrix(matrix); 
     matrix.setTranslate(0, ((height/2) * interpolatedTime))); 

     matrix.preTranslate(0, -height); 
     camera.restore(); 

     this.setAnimationListener(this); 
    } 

e:

public class MiddleToTopAnimation extends Animation { 
    public int height, width; 

    @Override 
    public void initialize(int width, int height, int parentWidth, 
      int parentHeight) { 
     // TODO Auto-generated method stub 
     super.initialize(width, height, parentWidth, parentHeight); 
     this.width = width; 
     this.height = height; 
     setDuration(500); 
     setFillAfter(true); 
     setInterpolator(new LinearInterpolator()); 
    } 

    Camera camera = new Camera(); 

    @Override 
    protected void applyTransformation(float interpolatedTime, Transformation t) { 
     // TODO Auto-generated method stub 
     super.applyTransformation(interpolatedTime, t); 

     Matrix matrix = t.getMatrix(); 
     camera.save(); 

     camera.getMatrix(matrix); 
     matrix.setTranslate(0, -((height/2) * interpolatedTime)));//here is the change 

     matrix.preTranslate(0, -height); 
     camera.restore(); 

     this.setAnimationListener(this); 
    } 

e utilizzarli con il dialogo

LinearLayout ll = (LinearLayout) findViewById(R.id.parentLayout);//parent layout in the xml, which serves as the background in the custom dialog 

ll.startAnimation(new DropDownToMiddleAnimation());//use with launching of the dialog 

ll.startAnimation(new MiddleToTopAnimation());//use while dismissing the dialog/finishing the dialog activity 
+1

Preferisco le animazioni XML rispetto alle animazioni codificate .. –

+0

beh, questa è la tua chiamata di progettazione . Uso classi di animazione hard-coded in quanto possono essere riutilizzate altrove. –

+0

Le animazioni XML possono anche essere riutilizzate ovunque .. –

2

slide_down.xml

<?xml version="1.0" encoding="utf-8"?> 
<translate xmlns:android="http://schemas.android.com/apk/res/android" 
    android:duration="@android:integer/config_longAnimTime" 
    android:fromYDelta="-50%p" 
    android:toYDelta="0%p" /> 

slide_up.xml

<?xml version="1.0" encoding="utf-8"?> 
<translate xmlns:android="http://schemas.android.com/apk/res/android" 
    android:duration="@android:integer/config_longAnimTime" 
    android:fromYDelta="0%p" 
    android:toYDelta="-100%p" />