android-自定义dialog&进入退出动画

来源:互联网 发布:我知你好张国荣 编辑:程序博客网 时间:2024/05/17 21:43

dropDialg: 从顶部下落到屏幕中间进入,退出从屏幕中间下落消失

效果如图

代码实现

① 自定义drop dialog

注意自定义dialog继承自AppCompatDialog

public class MyDialog extends AppCompatDialog {    public MyDialog(Context context) {        super(context, R.style.mydialog);    }    @Override    protected void onCreate(Bundle savedInstanceState) {        supportRequestWindowFeature(Window.FEATURE_NO_TITLE);        super.onCreate(savedInstanceState);        setContentView(R.layout.layout_mydialog);        DisplayMetrics metrics = getContext().getResources().getDisplayMetrics();        int widthPixels = metrics.widthPixels;        int heightPixels = metrics.heightPixels;        WindowManager.LayoutParams layoutParams = getWindow().getAttributes();        layoutParams.gravity = Gravity.CENTER;        layoutParams.width = (int) (widthPixels / 2.0f);        layoutParams.height = (int) (heightPixels / 4.0f);        getWindow().setAttributes(layoutParams);        initView();    }    private void initView() {        Button btnDis = (Button) findViewById(R.id.id_btn_dis);        btnDis.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                dismiss();            }        });    }}

② R.style.myDialog

 <style name="mydialog" parent="AlertDialog.AppCompat">        <item name="android:windowAnimationStyle">@style/dialog_enter_exit</item>    </style>    <style name="dialog_enter_exit" parent="android:Animation">        <item name="android:windowEnterAnimation">@anim/pop_enter</item>        <item name="android:windowExitAnimation">@anim/pop_exit</item>    </style>

③ 进入动画 pop_enter.xml

<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android">    <translate        android:duration="500"        android:fillAfter="true"        android:fromYDelta="-50%p"        android:toYDelta="0%p" /></set>


④ 退出动画 pop_exit.xml

<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto">    <translate        android:duration="500"        android:fillAfter="true"        android:fromYDelta="0%p"        android:toYDelta="100%p" /></set>

⑤ R.layout.layout_mydialog

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:background="#33ffff"    android:gravity="center"    android:orientation="vertical">    <TextView        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:text="dialog" />    <Button        android:id="@+id/id_btn_dis"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="dismiss" /></LinearLayout>

bottomDialog: 从屏幕底部弹出,从屏幕底部消失

效果图:

代码实现:

和dropDialog相比,改变的是

layoutParams.gravity = Gravity.BOTTOM;

pop_enter.xml

<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android">    <translate        android:duration="500"        android:fillAfter="true"        android:fromYDelta="100%p"        android:toYDelta="0%p" /></set>

还有pop_exit.xml

<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto">    <translate        android:duration="500"        android:fillAfter="true"        android:fromYDelta="0%p"        android:toYDelta="100%p" /></set>

① 自定义dailog,继承自AppCompatDialog

public class MyDialog extends AppCompatDialog {    public MyDialog(Context context) {        super(context, R.style.mydialog);    }    @Override    protected void onCreate(Bundle savedInstanceState) {        supportRequestWindowFeature(Window.FEATURE_NO_TITLE);        super.onCreate(savedInstanceState);        setContentView(R.layout.layout_mydialog);        DisplayMetrics metrics = getContext().getResources().getDisplayMetrics();        int widthPixels = metrics.widthPixels;        int heightPixels = metrics.heightPixels;        WindowManager.LayoutParams layoutParams = getWindow().getAttributes();        layoutParams.gravity = Gravity.BOTTOM;        layoutParams.width = widthPixels;        layoutParams.height = (int) (heightPixels / 3.0f);        getWindow().setAttributes(layoutParams);        initView();    }    private void initView() {        Button btnDis = (Button) findViewById(R.id.id_btn_dis);        btnDis.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                dismiss();            }        });    }}

② R.style.mydialog

 <style name="mydialog" parent="AlertDialog.AppCompat">        <item name="android:windowAnimationStyle">@style/dialog_enter_exit</item>    </style>    <style name="dialog_enter_exit" parent="android:Animation">        <item name="android:windowEnterAnimation">@anim/pop_enter</item>        <item name="android:windowExitAnimation">@anim/pop_exit</item>    </style>

③ anim: pop_enter.xml

<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android">    <translate        android:duration="500"        android:fillAfter="true"        android:fromYDelta="100%p"        android:toYDelta="0%p" /></set>

④ anim: pop_exit.xml

<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto">    <translate        android:duration="500"        android:fillAfter="true"        android:fromYDelta="0%p"        android:toYDelta="100%p" /></set>


⑤ layout布局文件

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:background="#33ffff"    android:gravity="center"    android:orientation="vertical">    <TextView        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:text="dialog" />    <Button        android:id="@+id/id_btn_dis"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="dismiss" /></LinearLayout>







0 0