动画无法在自定义对话框中工作

时间:2016-12-09 07:53:03

标签: android android-animation android-dialog

此代码没有错误,但没有在对话框中显示任何动画。刚为动画添加了2个动画文件并添加了dialog.getWindow()。setWindowAnimations(R.style.DialogTheme); 在主java文件中。 也在styles.xml文件中声明。 但没有显示动画。 我是android的新手。

主要活动

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>

@动画/ 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>

@动画/ 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>

3 个答案:

答案 0 :(得分:0)

您可以尝试final Dialog dialog = new Dialog(this, R.style.DialogTheme);

dialog.getWindow().setWindowAnimations(R.style.DialogTheme)不适用于对话框,因为set style仅在init()上,但dialog.getWindow().setWindowAnimations()在init()之后,因此无效。

有时,Instant Run会忽略此更改,因此您可以尝试停用Instant Run

最后一次尝试设置android:duration = 1000。

答案 1 :(得分:0)

我认为您的代码没有任何问题,唯一可能的问题可能是您的设备未启用对话框的动画。

检查您的设备动画设置是否设置为&#34;无动画&#34; (设置→显示→动画)然后对话框将不显示任何动画,您需要打开它并尝试代码是否有效。

答案 2 :(得分:0)

问题在于插补器值。使用5000加速度的加速插值器,这对于它来说太长了。将duration的值设置为1000可使代码完美运行!