web-dev-qa-db-ja.com

カスタムダイアログをアニメーション化する

テキストビューから下にスライドしているようにカスタムダイアログを表示しようとしています。これは可能ですか?ダイアログクラスにアニメーションを適用できないようです。私はコンストラクタでこの行を試しましたが、効果はありません:

this.getWindow()。setWindowAnimations(R.anim.paranimation);

アニメーションが正しいかどうかはわかりませんが、何が起こっているのかを確認したら調整できます。完全を期すために、以下にリストします。私は実際のアニメーションのヘルプを探しているのではなく、ダイアログへのアプリケーションを探しているだけです。

paranimation.xml:

<?xml version="1.0" encoding="utf-8"?>
<translate
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:fromXDelta="-200%"
    Android:toXDelta="0%"
    Android:fromYDelta="200%"
    Android:toYDelta="0%"
    Android:duration="3000"
    Android:zAdjustment="top">
</translate>
92
FMLDev

今日はDialogアニメーションに苦労してきましたが、ようやくスタイルを使用して動作させることができたので、ここに例を示します。

まず、最も重要なこと-私はおそらく今日5つの異なる方法で働いていたが、理由はわからなかった...デバイスのアニメーション設定が「アニメーションなし」に設定されている場合(設定→表示→アニメーション)、ダイアログが勝ちました何をしてもアニメ化されない!

以下は、styles.xmlの簡略版です。うまくいけば、それは自明です。これはres/valuesに配置する必要があります。

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="PauseDialog" parent="@Android:style/Theme.Dialog">
        <item name="Android:windowAnimationStyle">@style/PauseDialogAnimation</item>
    </style>

    <style name="PauseDialogAnimation">
        <item name="Android:windowEnterAnimation">@anim/spin_in</item>
        <item name="Android:windowExitAnimation">@Android:anim/slide_out_right</item>
    </style>
</resources>

windowEnterAnimationは私のアニメーションの1つで、res\animにあります。 windowExitAnimationは、Android SDKの一部であるアニメーションの1つです。

次に、アクティビティonCreateDialog(int id)メソッドでダイアログを作成するときに、次のことを行います。

Dialog dialog = new Dialog(this, R.style.PauseDialog);

// Setting the title and layout for the dialog
dialog.setTitle(R.string.pause_menu_label);
dialog.setContentView(R.layout.pause_menu);

あるいは、テーマを受け取るDialogコンストラクターを使用する代わりに、次の方法でアニメーションを設定できます。

Dialog dialog = new Dialog(this);
dialog.getWindow().getAttributes().windowAnimations = R.style.PauseDialogAnimation;
206
ChrisJD

ChrisJDコードを使用して、Dialogboxのフェードインおよびフェードアウトアニメーションを作成しました。

  1. Res/style.xmlの内部

    <style name="AppTheme" parent="Android:Theme.Light" />
    <style name="PauseDialog" parent="@Android:style/Theme.Dialog">
        <item name="Android:windowAnimationStyle">@style/PauseDialogAnimation</item>
    </style>
    
    <style name="PauseDialogAnimation">
        <item name="Android:windowEnterAnimation">@anim/fadein</item>
        <item name="Android:windowExitAnimation">@anim/fadeout</item>
    </style>
    
  2. Anim/fadein.xmlの内部

    <alpha xmlns:Android="http://schemas.Android.com/apk/res/Android"
        Android:interpolator="@Android:anim/accelerate_interpolator"
        Android:fromAlpha="0.0" Android:toAlpha="1.0" Android:duration="500" />
    
  3. Anim/fadeut.xmlの内部

    <alpha xmlns:Android="http://schemas.Android.com/apk/res/Android"
        Android:interpolator="@Android:anim/anticipate_interpolator"
        Android:fromAlpha="1.0" Android:toAlpha="0.0" Android:duration="500" />
    
  4. 主な活動

    Dialog imageDiaglog= new Dialog(MainActivity.this,R.style.PauseDialog);
    
48
Akshay Taru

右から左(入力アニメーション)および左から右(終了アニメーション)の場合:

styles.xml:

<style name="CustomDialog" parent="@Android:style/Theme.Dialog">
    <item name="Android:windowAnimationStyle">@style/CustomDialogAnimation</item>
</style>

<style name="CustomDialogAnimation">
    <item name="Android:windowEnterAnimation">@anim/translate_left_side</item>
    <item name="Android:windowExitAnimation">@anim/translate_right_side</item>
</style>

res/anim /:に2つのファイルを作成します

translate_right_side.xml:

<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:fromXDelta="0%" Android:toXDelta="100%"
    Android:fromYDelta="0%" Android:toYDelta="0%"
    Android:duration="600"/>

translate_left_side.xml:

<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:duration="600"
    Android:fromXDelta="100%"
    Android:toXDelta="0%"/>

あなたのフラグメント/アクティビティ:

Dialog dialog = new Dialog(getActivity(), R.style.CustomDialog);
16
vasanth

私は同じ問題に会いますが、ついに私は次の方法で問題を解決します

((ViewGroup)dialog.getWindow().getDecorView())
.getChildAt(0).startAnimation(AnimationUtils.loadAnimation(
context,Android.R.anim.slide_in_left));
12
youshuang

まず、res/animに2つのアニメーションリソースを作成する必要があります

slide_up.xml

<set xmlns:Android="http://schemas.Android.com/apk/res/Android">
<translate 
  Android:duration="@Android:integer/config_mediumAnimTime" 
  Android:fromydelta="100%" 
  Android:interpolator="@Android:anim/accelerate_interpolator" 
  Android:toxdelta="0">
</translate>

slide_bottom.xml

<set xmlns:Android="http://schemas.Android.com/apk/res/Android">
<translate 
    Android:duration="@Android:integer/config_mediumAnimTime" 
    Android:fromydelta="0%p" 
    Android:interpolator="@Android:anim/accelerate_interpolator" 
    Android:toydelta="100%p">
</translate>

その後、スタイルを作成する必要があります

<style name="DialogAnimation">
    <item name="Android:windowEnterAnimation">@anim/slide_up</item>
    <item name="Android:windowExitAnimation">@anim/slide_bottom</item>
</style>

この行をクラスに追加します

dialog.getWindow().getAttributes().windowAnimations = R.style.DialogAnimation; //style id

ベース http://www.devexchanges.info/2015/10/showing-dialog-with-animation-in-Android.html

3

以下のコードを試してください:

public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

        getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));// set transparent in window background

        View _v = inflater.inflate(R.layout.some_you_layout, container, false);

        //load animation
        //Animation transition_in_view = AnimationUtils.loadAnimation(getContext(), Android.R.anim.fade_in);// system animation appearance
        Animation transition_in_view = AnimationUtils.loadAnimation(getContext(), R.anim.customer_anim);//customer animation appearance

        _v.setAnimation( transition_in_view );
        _v.startAnimation( transition_in_view );
        //really beautiful
        return _v;

    }

カスタムのアニメーションを作成します:res/anim/customer_anim.xml:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:Android="http://schemas.Android.com/apk/res/Android">

    <translate
        Android:duration="500"
        Android:fromYDelta="100%"
        Android:toYDelta="-7%"/>
    <translate
        Android:duration="300"
        Android:startOffset="500"
        Android:toYDelta="7%" />
    <translate
        Android:duration="200"
        Android:startOffset="800"
        Android:toYDelta="0%" />

</set>
0
amiron