前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android开发(30) 制作从底部向上出现的对话框

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

作者头像
张云飞Vir
发布2020-03-16 15:18:59
1.4K0
发布2020-03-16 15:18:59
举报
文章被收录于专栏:写代码和思考写代码和思考

需求

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

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

实现方式:

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

代码语言:javascript
复制
  <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

代码语言:javascript
复制
        <?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

代码语言:javascript
复制
        <?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,指定一个动画

代码语言:javascript
复制
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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 需求
  • 实现方式:
    • 进入时的动画 dialog_enter.xml
    • 离开时的动画 dialog_exit.xml
    • 代码解释:
    • 参考:
    相关产品与服务
    容器服务
    腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档