美文网首页android安卓开发首页投稿(暂停使用,暂停投稿)
Android开发(30) 制作从底部向上出现的对话框

Android开发(30) 制作从底部向上出现的对话框

作者: 张云飞Vir | 来源:发表于2016-06-22 11:51 被阅读936次

    需求

    实现一个对话框,它出现时,从底部向上逐渐移动出现,关闭时,逐渐向下移除屏幕:

    1.点击 显示 按钮时,一个dialog对话框从底部慢慢向上弹出。
    2.关闭dialog时, dialog缓慢的移动向底部消失。很平滑的效果。

    实现方式:

    先制作一个style 资源文件,创建 mystyle

      <style name="mystyle" parent="android:Animation">
            <item name="@android:windowEnterAnimation">@anim/dialog_enter</item>
            <item name="@android:windowExitAnimation">@anim/dialog_exit</item>
        </style>
    

    在这个mystyle中使用了两个动画,如下:

    进入时的动画 dialog_enter.xml

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

    离开时的动画 dialog_exit.xml

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

    在activity中,指定对话框的 window的 setWindowAnimations,指定一个动画

    public class MainActivity extends Activity {
        Button button1;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            
            button1 = (Button)findViewById(R.id.button1);
            button1.setOnClickListener(mOnClickListener);
        }
    
        OnClickListener mOnClickListener = new View.OnClickListener(){
    
            @Override
            public void onClick(View v) {
                //TODO Auto-generated method stub   
                AlertDialog dialog = new AlertDialog.Builder(MainActivity.this)  
                        .setTitle("title").setMessage("message").create();  
                Window window = dialog.getWindow();  
                window.setGravity(Gravity.BOTTOM);  //此处可以设置dialog显示的位置   
                window.setWindowAnimations(R.style.mystyle);  //添加动画   
                dialog.show(); 
            }
            
        }; 
    }
    

    代码解释:

    1. 为 dialog 所在的windows 设置了一个 动画样式 style
    2. 该style 指定了 窗体(windows)进入的动画(dialog_enter) 和离开的动画 (dialog_exit)
    3. 在进入时的动画dialog_enter 中,写了一个 translate 的变化,指定从 其父容器的 100% 位置开始。 其父容器的 100% 位置 是 屏幕以外的位置,是看不到,这是一个开始点。没有指定结束点,结束点就默认 本身应该显示的位置(即将显示的位置)。
    4. 同理,dialog_exit定义了离开时动画。该动画未指定开始位置,指定了结束位置是 其父容器的 100% 位置 ,这样就慢慢的向下消失在屏幕以外。

    android:toYDelta="100%p" 中的 100% 指示了 其父容器的 100% 位置

    而如果写成
    android:toYDelta="100%",即是指示了 起自身的 100% 位置。

    参考:

    http://www.linuxidc.com/Linux/2012-04/59153.htm

    http://blog.csdn.net/ztp800201/article/details/7387668

    相关文章

      网友评论

        本文标题:Android开发(30) 制作从底部向上出现的对话框

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