美文网首页android精彩编程案例系列
第5例:仿退出58同城动画对话框

第5例:仿退出58同城动画对话框

作者: 追梦小乐 | 来源:发表于2018-06-27 15:11 被阅读14次

    核心思想知识点:
    1)、 AlertDialog的基本使用
    2)、添加动画

    效果图如下

    GIF.gif

    功能实现过程

    1、strings.xml

    <resources>
        <string name="app_name">动画对话框</string>
        <string name="text_title1">提示</string>
        <string name="text_title2">您确定要退出58同城吗?</string>
        <string name="text_btn_determine">确定</string>
        <string name="text_btn_cancel">取消</string>
    </resources>
    

    2、dialog_layout.xml

    <?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:orientation="vertical">
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center_horizontal"
            android:orientation="vertical">
            <!--标题-->
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:paddingTop="20dp"
                android:text="@string/text_title1"
                android:textColor="@color/black"
                android:textSize="16sp" />
            <!--提示文字-->
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:paddingBottom="50dp"
                android:paddingLeft="20dp"
                android:paddingRight="20dp"
                android:paddingTop="20dp"
                android:text="@string/text_title2"
                android:textColor="@color/blue"
                android:textSize="20sp" />
            <!--线-->
            <View
                android:layout_width="match_parent"
                android:layout_height="1dp"
                android:background="@color/yellow" />
        </LinearLayout>
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">
            <!--确定按钮-->
            <Button
                android:id="@+id/btn_determine"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:background="@null"
                android:text="@string/text_btn_determine"
                android:textColor="@color/orange"
                android:textSize="20sp" />
            <!--线-->
            <View
                android:layout_width="1dp"
                android:layout_height="match_parent"
                android:background="@color/yellow" />
            <!--取消按钮-->
            <Button
                android:id="@+id/btn_cancel"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:background="@null"
                android:text="@string/text_btn_cancel"
                android:textColor="@color/orange"
                android:textSize="20sp" />
        </LinearLayout>
    
    </LinearLayout>
    

    3、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="mystyle" parent="android:Animation">
            <!--进入时的动画-->
           <item name="android:windowEnterAnimation">@anim/dialog_enter</item>
            <!--退出时的动画-->
            <item name="android:windowExitAnimation">@anim/dialog_exit</item>
        </style>
    
    
    </resources>
    

    4、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%">
        </translate>
    
    </set>
    

    5、dialog_exit.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>
    

    6、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:id="@+id/activity_main"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@drawable/bg"
        >
    
    </RelativeLayout>
    

    7、MainActivity.java

    public class MainActivity extends Activity {
    
        private Button button_determine, button_cancel;      //定义对话框按钮
        private AlertDialog dlg;                               //定义对话框
    
        @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) {
                //创建对话框实例
                dlg = new AlertDialog.Builder(this).create();
                dlg.show();                             //显示对话框
                Window window = dlg.getWindow();        //获取对话框窗口
                window.setGravity(Gravity.CENTER);     //此处设置dialog显示在中心位置
                window.setWindowAnimations(R.style.mystyle);      //添加动画
                window.setContentView(R.layout.dialog_layout);   //设置对话框布局文件
                //获取对话框确定按钮
                button_determine = (Button) window.findViewById(R.id.btn_determine);
                //获取对话框取消按钮
                button_cancel = (Button) window.findViewById(R.id.btn_cancel);
                initEvent();                                       //调用初始化事件方法
            }
            return super.onKeyDown(keyCode, event);
        }
    
        /**
         * 该方法出事对话框中按钮的事件,单击确定按钮退出该应用
         * 单击取消按钮,对话框将移动至底部消失
         */
        private void initEvent() {
            button_determine.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    dlg.dismiss();          //对话框移动到底部消失
                    finish();               //关闭当前应用
                }
            });
            button_cancel.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    dlg.dismiss();          //对话框移动到底部消失
                }
            });
        }
    }
    

    相关文章

      网友评论

        本文标题:第5例:仿退出58同城动画对话框

        本文链接:https://www.haomeiwen.com/subject/ncwbyftx.html