2012-07-10 15 views
5

現在のところ、ダイアログのトランジションエフェクトに取り組んでいます。以下の画像を参考にしてください:enter image description hereダイアログ遷移エフェクト

私のダイアログの入り口のアニメーションは上から下になるはずです。終了アニメーションは中から上になるはずです。私は以下のXMLアニメーションを使用していますが、残念ながら動作しません。

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:これは通常のDialogではありません。

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); 
    } 

と:それはあなたが、あなたが

あなたはアニメーションクラスを作成することができ、このアプローチに従うことができ活動としてダイアログを作成している場合AndroidManifest.xml

+0

どのようにこれらのアニメーションを適用していますか? – Joru

+0

あなたが 'Dialogue Activity'を開くと、この移行は簡単に実装できると思います。 –

+0

何を使用していますか? DialogFragment?トランジションを適用してトランザクションをコミットする場所にコードを貼り付けてください。 –

答えて

1

Theme.Dialogを適用activity次のとおりです。

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); 
    } 

とあなたのダイアログ

でそれらを使用します3210
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

私はハードコードされたアニメーションよりもXMLアニメーションが好きです。 –

+0

あなたのデザインコール。ハードコーディングされたアニメーションクラスは他の場所で再利用できるため、使用します。 –

+0

XMLアニメーションはどこでも再利用することができます。 –

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" />