質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

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

Android

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

Q&A

解決済

1回答

1143閲覧

animationをdialog画面にも適応する方法。

hood

総合スコア351

Java

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

Android

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

0グッド

0クリップ

投稿2018/10/09 12:29

編集2018/10/10 15:01

###animationをdialog画面にも適応する方法。
タイトル通りです。
私はある方からアドバイスいただいて、下記のようにアニメーションを適応する方法を学びました。
『トップレベルの背景色を黒、ルートビューの背景色を白として、ルートビューの透明度を落とすことで黒くする』という方法です。

lang

1 2 View decorView = getWindow().getDecorView(); 3 decorView.setBackgroundColor(Color.BLACK); 4 5 // ルートビューにIDを与えてfindViewById()で取得しても同じ 6 View rootView = ((ViewGroup) decorView).getChildAt(0); 7 rootView.setBackgroundColor(Color.WHITE); 8 9 AlphaAnimation alpha = new AlphaAnimation(1.0f, 0.0f); 10 alpha.setFillEnabled(true); 11 alpha.setFillAfter(true); 12 alpha.setDuration(3000); 13 14 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

1 2 3 AlphaAnimation fadeout; 4 fadeout =new AlphaAnimation(1.0f,0.0f); 5 fadeout.setFillEnabled(true); 6 fadeout.setFillAfter(true); 7 fadeout.setDuration(1500); 8 9 fadeout.setAnimationListener(new Animation.AnimationListener() { 10 @Override 11 public void onAnimationStart(Animation animation) { 12 dismiss();//ここでDialogを終わらせたらダメらしい。 13 } 14 @Override 15 public void onAnimationEnd(Animation animation) { 16 //フェードアウトが終わったとき、次のactivityを開始。 17 Intent intent = new Intent(getContext(), FirstActivity.class); 18 intent.putExtra("number", "0"); 19 startActivityForResult(intent, 0); 20 //次のactivityを開始したら、このactivityを消す。 21 ((Activity) getContext()).finish(); 22 } 23 @Override 24 public void onAnimationRepeat(Animation animation) { 25 } 26 });

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kakajika

2018/10/10 14:37

フェードアウトする時にDialogも閉じるのではダメなのでしょうか?
hood

2018/10/10 14:52 編集

回答ありがとうございます。その方法も試してみましたがだめでした。 Dialogがanimationの初めで終了してしまうため、animetion終わりのコードが使えなくなるみたいです・・・
hood

2018/10/10 15:02 編集

そのコードも追記として、質問のほうにのせておきたいと思います。
guest

回答1

0

ベストアンサー

とりあえず元々のご質問の方は置いといて、追記のコードを動かす方法について回答しますね。
ご推測の通りDialogFragmentを消した後ではContextの取得などができず落ちてしまいますから、以下のようにDialogを消す前にContextを取得しておいて使えばOKです。

java

1final Context context = getContext(); 2 3AlphaAnimation fadeout = ...; 4fadeout.setAnimationListener(new Animation.AnimationListener() { 5 @Override 6 public void onAnimationStart(Animation animation) { 7 dismiss(); 8 } 9 @Override 10 public void onAnimationEnd(Animation animation) { 11 // このメソッドの中では前もって取得しておいたcontextを使うようにする 12 Intent intent = new Intent(context, FirstActivity.class); 13 intent.putExtra("number", "0"); 14 context.startActivityForResult(intent, 0); 15 ((Activity) context).finish(); 16 } 17 @Override 18 public void onAnimationRepeat(Animation animation) { 19 } 20});

また、ActivityのアニメーションをDialog側で処理しているのはおかしいですね。それが原因で今回のような問題が発生するのだと思います。できればActivityのアニメーションはActivity側で処理するようにしましょう。

投稿2018/10/10 15:15

kakajika

総合スコア3131

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hood

2018/10/10 15:33

回答ありがとうございます!無事に問題が解決しました! 嬉しくて指がキーボードの上で踊っております!(深夜のテンションお許しください・・) kakajikaさんには前にもお世話になりましたね・・・ この件に関しては、今日一日中悩んで、集中力散漫になっていたので、本当にありがたいです! >>>ActivityのアニメーションはActivity側で処理するようにしましょう。 そうですね。これからは気をつけたいと思います・・・ また、contextの存在の意義がネットで調べてもよく分からなかったので、そういった意味でも今回は勉強になりました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問