テキストビューから下にスライドしているようにカスタムダイアログを表示しようとしています。これは可能ですか?ダイアログクラスにアニメーションを適用できないようです。私はコンストラクタでこの行を試しましたが、効果はありません:
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>
今日は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;
ChrisJDコードを使用して、Dialogboxのフェードインおよびフェードアウトアニメーションを作成しました。
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>
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" />
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" />
主な活動
Dialog imageDiaglog= new Dialog(MainActivity.this,R.style.PauseDialog);
右から左(入力アニメーション)および左から右(終了アニメーション)の場合:
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);
私は同じ問題に会いますが、ついに私は次の方法で問題を解決します
((ViewGroup)dialog.getWindow().getDecorView())
.getChildAt(0).startAnimation(AnimationUtils.loadAnimation(
context,Android.R.anim.slide_in_left));
まず、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
以下のコードを試してください:
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>