Mohit Taparia
Mohit Taparia

Reputation: 49

Animation not working in custom Dialog

This code is working with no errors but it is not showing any animation in the dialog. Just added the 2 anim files for animation and added dialog.getWindow().setWindowAnimations(R.style.DialogTheme); in the main java file. also declared in styles.xml file. but no animation is being shown. I am new to android.

Main Activity

package com.dialog;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}

//Custom Dialog
public void open(View view)
{
    final Dialog dialog= new Dialog(this);
    dialog.setContentView(R.layout.dialog);
    dialog.setTitle("Dialog");
    Button btnDismiss=(Button)dialog.findViewById(R.id.btnDismiss);
    Button btnOkay=(Button)dialog.findViewById(R.id.btnOkay);
    btnOkay.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Toast.makeText(MainActivity.this,"Dialog     Successful",Toast.LENGTH_LONG).show();
            dialog.dismiss();
        }
    });
    btnDismiss.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            dialog.dismiss();
        }
    });
    dialog.getWindow().setWindowAnimations(R.style.DialogTheme);
    dialog.show();
}


public void close(View view)
{
    finish();
}

}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context=".MainActivity">

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Dialog App"
    android:id="@+id/tvApp"
    android:textSize="35dp"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true" />


<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/imageView"
    android:src="@mipmap/ic_launcher"
    android:layout_below="@+id/tvApp"
    android:layout_marginTop="60dp"
    android:layout_alignRight="@+id/tvApp"
    android:layout_alignEnd="@+id/tvApp"
    android:layout_alignLeft="@+id/tvApp"
    android:layout_alignStart="@+id/tvApp" />
<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Dialog"
    android:id="@+id/btnDialog"
    android:layout_below="@+id/imageView"
    android:layout_alignRight="@+id/tvApp"
    android:layout_alignEnd="@+id/tvApp"
    android:layout_marginTop="80dp"
    android:onClick="open"
    android:layout_alignLeft="@+id/imageView"
    android:layout_alignStart="@+id/imageView" />

</RelativeLayout>

styles.xml

<resources>

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>
<style name="DialogTheme">
    <item name="android:windowEnterAnimation">@anim/slide_left</item>
    <item name="android:windowExitAnimation">@anim/slide_right</item>
</style>
</resources>

@anim/slide_left

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromXDelta="100%p" android:toXDelta="0"
    android:interpolator="@android:anim/accelerate_interpolator"
    android:duration="5000" />
</set>

@anim/slide_right

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="5000"
    android:fromXDelta="0%p"
    android:interpolator="@android:anim/accelerate_interpolator"
    android:toXDelta="-100%p"  />
</set>

dialog.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_height="match_parent">

<TextView
    android:text="Sure??"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="10dp"
    android:id="@+id/tvDismiss" />

<Button
    android:text="Okay"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/btnOkay"
    android:layout_below="@id/tvDismiss"
    android:layout_centerHorizontal="true" />

<Button
    android:text="Dismiss"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/btnDismiss"
    android:layout_below="@+id/btnOkay"
    android:layout_alignStart="@+id/btnOkay" />
<Button
    android:text="Exit"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/btnExit"
    android:layout_below="@+id/btnDismiss"
    android:layout_alignStart="@+id/btnOkay"
    android:onClick="close"/>
</RelativeLayout>

Upvotes: 0

Views: 4494

Answers (3)

Mohit Taparia
Mohit Taparia

Reputation: 49

Problem is with the interpolator value. Used accelarate interpolator with 5000 duration which is too long for it. Setting the value of duration to 1000 makes the code work perfectly!

Upvotes: 0

Yat3s
Yat3s

Reputation: 330

You can try final Dialog dialog = new Dialog(this, R.style.DialogTheme);

dialog.getWindow().setWindowAnimations(R.style.DialogTheme) is not work for dialog, because set style is just on init(), but dialog.getWindow().setWindowAnimations() is after init(), so it's not working.

Sometime, Instant Run will ignore this change, so you can try disable Instant Run

last try set android:duration = 1000.

Upvotes: 0

Ravinder Bhandari
Ravinder Bhandari

Reputation: 2636

I don't think there's anything wrong with your code, the only problem it might have is may be the animations for dialogs are not enabled in your device.

Check if your devices animation settings are set to "No Animations" (Settings → Display → Animation) then the dialogs will not show any animations, you need to turn that on and try if your code works.

Upvotes: 2

Related Questions