質問編集履歴

1 誤字修正・追記

hood

hood score 157

2018/10/11 00:01  投稿

animationをdialog画面にも適応する方法。
###animationをdialog画面にも適応する方法。
タイトル通りです。
私はある方からアドバイスいただいて、下記のようにアニメーションを適応する方法を学びました。
『トップレベルの背景色を黒、ルートビューの背景色を白として、ルートビューの透明度を落とすことで黒くする』という方法です。
```lang-java
       View decorView = getWindow().getDecorView();
       decorView.setBackgroundColor(Color.BLACK);
       // ルートビューにIDを与えてfindViewById()で取得しても同じ
       View rootView = ((ViewGroup) decorView).getChildAt(0);
       rootView.setBackgroundColor(Color.WHITE);
       AlphaAnimation alpha = new AlphaAnimation(1.0f, 0.0f);
       alpha.setFillEnabled(true);
       alpha.setFillAfter(true);
       alpha.setDuration(3000);
       rootView.setAnimation(alpha)
```
これは上手くいき、その人には感謝しかないのですが、最近ある問題が出てきました。
それはdialogflagmentをactivity内で出したとき、dialog画面にanimationが適応できないということです。
背景のactivity画面はきちんと暗くなるのですが、dialog画面だけが残ってしまいます。
これに対応する策について、私なりに二つ考えました。
一つ目はdialogflagmentのxmlファイルをactivityのルートビューに加えること。
二つ目はdialogflagmentのxmlファイルのルートビューにIDを与え、findViewById()で取得し、複数の同時アニメーションをすることです。
しかし、両方とも上手くいきませんでした。
ここで私はteratailに質問するころあいかな?と思いました。
というのも、具体的な実装で私が間違っているのならいいのですが、上二つのやりかたでは、そもそもできないのではなかったらこまるな、と思ったからです。
肝心の質問ですが、ここでは以下のようにしたいと思います。
『animationをdialog画面にも適応するには上にあげた二つのやりかたでいいのか?あってなかった、もっといいやりかたがあるのか?』
どうかご教授お願いします・・・!
どうかご教授お願いします・・・!
追記---
また、私はDialogを消してから、activityのフェードアウトをするという方法も考えました。
しかし、それも上手くいきませんでした。
どうやら、`onAnimationStart`でDialogを終わらせると、次のactivityを開始するコードが実行されないみたいです。(すでにDialgは死んでいるため)
```lang-java
AlphaAnimation fadeout;
       fadeout =new AlphaAnimation(1.0f,0.0f);
       fadeout.setFillEnabled(true);
       fadeout.setFillAfter(true);
       fadeout.setDuration(1500);
       fadeout.setAnimationListener(new Animation.AnimationListener() {
           @Override
           public void onAnimationStart(Animation animation) {
               dismiss();//ここでDialogを終わらせたらダメらしい。
           }
           @Override
           public void onAnimationEnd(Animation animation) {
               //フェードアウトが終わったとき、次のactivityを開始。
               Intent intent = new Intent(getContext(), FirstActivity.class);
               intent.putExtra("number", "0");
               startActivityForResult(intent, 0);
               //次のactivityを開始したら、このactivityを消す。
               ((Activity) getContext()).finish();
           }
           @Override
           public void onAnimationRepeat(Animation animation) {
           }
       });
```
  • Java

    16128 questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • Android

    7390 questions

    Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る