效果:对话框会从顶部滚到中间显示,点击取消就会从中间滚到下方退出界面
实现:
1.在res下创建anim文件夹,然后创建两个Animation resourse file文件:
dialog_enter.xml:
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <!--从上进入到中间--> <translate android:duration="200" android:fromYDelta="-100%"/> </set>
dialog_out.xml:
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <!--从中间到底部退出--> <translate android:fromYDelta="0" android:toYDelta="100%" android:duration="200"/> </set>
2.在style.xml文件里设置对话框的动画样式:
<style name="dialog_animation" parent="android:Animation"> <!--进入时的动画--> <item name="@android:windowEnterAnimation">@anim/dialog_enter</item> <!--退出时的动画--> <item name="@android:windowExitAnimation">@anim/dialog_out</item> </style>
3.在Activity中创建一个dialog,dialog设置syle样式:
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode==KeyEvent.KEYCODE_BACK){ AlertDialog dialog=new AlertDialog.Builder(this) .setTitle("123") .setMessage("dialog显示和退出动画") .setPositiveButton("确认", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }) .setNegativeButton("取消",null) .create(); dialog.show(); Window window=dialog.getWindow(); window.setGravity(Gravity.CENTER); window.setWindowAnimations(R.style.dialog_animation); } return super.onKeyDown(keyCode, event); } }
运行报下面的错误:
Error: style attribute '@android:attr/windowExitAnimation' not found
解决方法:
在gradle.properties中添加 android.enableAapt2=false