Özel bir iletişim kutusunu canlandırma


98

Metin görünümünden aşağı kayıyormuş gibi görünen özel bir iletişim kutusu oluşturmaya çalışıyorum. Mümkün mü? Diyalog sınıfına herhangi bir animasyon uygulayamıyorum. Bu satırı kurucuda denedim, ancak hiçbir etkisi yok:

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

Animasyonun doğru olup olmadığından bile emin değilim, ama ne yaptığını görünce onu ayarlayabileceğim. Tamlık adına aşağıda listeleyeceğim. Gerçek animasyon için yardım aramıyorum, sadece iletişim kutusundaki uygulama.

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>

4
Bunu da bilmem gerekiyor. Bunun dışında hemen hemen her şeyi canlandırmak mümkün görünüyor. Yoksa yanılıyor muyum ?!
andy_spoo

Yanıtlar:


216

Bugün Dialog animasyonuyla uğraşıyorum, sonunda stilleri kullanarak çalıştırdım, işte bir örnek.

Başlangıç ​​olarak, en önemli şey - muhtemelen bugün 5 farklı şekilde çalıştırdım ama anlayamadım çünkü ... Cihazlarınızın animasyon ayarları "Animasyon Yok" (Ayarlar → Ekran → Animasyon) olarak ayarlandıysa, iletişim kutuları kazandı Ne yaparsan yap canlandırılmasın!

Aşağıdaki, styles.xml dosyamın basitleştirilmiş bir sürümüdür. Umarım kendi kendini açıklayıcıdır. Bu, içinde bulunmalıdır 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>

windowEnterAnimationBenim animasyonlar biridir ve yer almaktadır res\anim. windowExitAnimationAndroid SDK bir parçası olan animasyonlar biridir.

Daha sonra etkinlikler onCreateDialog(int id)yöntemimde Diyaloğu oluşturduğumda aşağıdakileri yapıyorum.

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

Alternatif olarak, bir temayı alan Dialog yapıcısını kullanmak yerine animasyonları aşağıdaki şekilde ayarlayabilirsiniz.

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

2
Bu sadece bu örnek için uydurduğum bir isimdi, aslında o animasyonu hiç yaratmadım.
ChrisJD

2
Bu yanıt için çok teşekkürler, gerçekten yetersiz şekilde belgelenmiştir, ancak bu gönderiyi Android Geliştiricileri grubundan bir ipucu ile buldum .
David Snabel-Caunt

3
+1 "Cihazlarınızın animasyon ayarları" Animasyon Yok "olarak ayarlanmışsa (Ayarlar → Ekran → Animasyon), ne yaparsanız yapın iletişim kutuları animasyonlu olmayacaktır!". Bunu kontrol etmeyi unutmuştum.
Vincent Mimoun-Prat

Dialog dialog = new Dialog(this, R.style.PauseDialog);API 11 içindir, ancak bu geneldirDialog dialog = new Dialog(Context context);
mehmet

2
Bu konuda karşılaştığım sorun, iletişim kutusu gösterildiğinde uygulamayı küçülttüğümde ve uygulamayı tekrar geri yüklediğimde, iletişim kutusunun yeniden canlandırması, bundan nasıl kaçınılacağı, mükemmel olduğu. +1
Parth Anjaria

57

ChrisJD kodunu kullanarak Dialogbox için Fade in ve Fade Out animasyonunu oluşturdum.

  1. Res / style.xml içinde

    <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 içinde

    <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 / fadeout.xml içinde

    <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. Ana aktivite

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

11
Varsayılan android fade animasyonlarını kullanabilirsiniz '@android: anim / fade_in' '@android: anim / fade_out'
Marek

20

Sağdan sola (giriş animasyonu) ve soldan sağa (çıkış animasyonu):

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 / içinde iki dosya oluşturun:

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

Parçanızda / Faaliyetinizde:

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

13

Aynı problemle karşılaşıyorum, ama sonunda problemi takip edilen yolla çözüyorum

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

4
Mantıklı bir cevap değil. İletişim kutusunun içindeki görüntüler canlandırılıyor
DJphy

13

İlk olarak, res / anim dizininde iki animasyon kaynağı oluşturmanız gerekir.

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

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

o zaman bir stil yaratmalısın

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

ve bu satırı sınıfınıza ekleyin

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

Merkezli http://www.devexchanges.info/2015/10/showing-dialog-with-animation-in-android.html


referans URL yararlıdır!
ahmednabil88

2

Aşağıdaki kodu deneyin:

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;

    }

Özel Animasyonu oluşturun: 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>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.