自定义dialog和弹出dialog的动画

##补充

设置 位置必须在setContentView()之前;设置大小必须在setContentView()之后

public class AdressSelectDialog extends Dialog {
    public AdressSelectDialog(Context context,int width,int height,View view,int themeResId){
        super(context,themeResId);
        Window window = getWindow();

        WindowManager.LayoutParams params = window.getAttributes();

        //新坐标起始位置
//        params.x = 0;
//        params.y = 400;

        params.gravity = Gravity.BOTTOM;
        window.setAttributes(params);
        setContentView(view);
        Window window1 = getWindow();

        WindowManager.LayoutParams params1 = window1.getAttributes();
        params1.width = width;
        params1.height = height;
        window1.setAttributes(params1);



    }

    
}

##自定义dialog

  final Dialog dialog = new Dialog(ChartVisit.this);
                LayoutInflater inflater=getLayoutInflater();
                final View dialogview=inflater.inflate(R.layout.layout_fragment_chart_visit_screen_dialog, null);
                Window dialogWindow = dialog.getWindow();
                dialogWindow.setGravity(Gravity.CENTER | Gravity.BOTTOM);//设置dialog的位置
                dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);//取消dialog的默认标题   
 //必须填写上面找到的View ,不然会再找一遍view,导致里面的点击事件不反应              
//dialog.setContentView(R.layout.layout_fragment_chart_visit_screen_dialog);
                dialog.setContentView(dialogview);
                dialog.setCanceledOnTouchOutside(false);//点击其他位置可以取消dialog

                TextView textView= (TextView) dialogview.findViewById(R.id.textview_back);
                textView.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        dialog.dismiss();
                    }
                });
                LinearLayout linearLayout= (LinearLayout) dialogview.findViewById(R.id.linearlayout);
                linearLayout.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        MyDialog myDialog=new MyDialog(ChartVisit.this,R.style.NoDialogTitle);
                        myDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
                        myDialog.showDialog(R.layout.layout_fragment_chart_visit_screen2,0,0);

//                        Toast.makeText(ChartVisit.this, "我是dialog", Toast.LENGTH_SHORT).show();
//                        Dialog dialog1=new Dialog(ChartVisit.this);
//                        LayoutInflater inflater=getLayoutInflater();
//                        final View dialogview1=inflater.inflate(R.layout.layout_fragment_chart_visit_screen2, null);
//                        Window dialogWindow = dialog1.getWindow();
//                        dialogWindow.setGravity(Gravity.CENTER | Gravity.BOTTOM);//设置dialog的位置
//                        /**
//                         * 对dialog的设置必须放在setContenView之前
//                         */
//                        dialog1.requestWindowFeature(Window.FEATURE_NO_TITLE);//取消dialog的默认标题
//                        dialog1.setCanceledOnTouchOutside(false);//点击其他位置可以取消dialog
//                        dialog1.setContentView(dialogview1);
//                        //添加动画
//                        TranslateAnimation animation=new TranslateAnimation(dialogview.getWidth(),0,0,0);
//                        animation.setDuration(2000);
//                        dialogview1.setAnimation(animation);
//                        animation.start();
//
//                        dialog1.show();
//                        WindowManager windowManager = getWindowManager();
//                        Display display = windowManager.getDefaultDisplay();
//                        WindowManager.LayoutParams lp = dialog.getWindow().getAttributes();
//                        lp.width = (int)(display.getWidth()); //设置宽度
//                        (lp).height=(int)dialogview.getHeight();//设置高度
//                        dialog1.getWindow().setAttributes(lp);
                    }
                });
                dialog.show();
                /**
                 * 设置dialog的大小必须在show()的后面,不然不起作用
                 */
                WindowManager windowManager = getWindowManager();
                Display display = windowManager.getDefaultDisplay();
                WindowManager.LayoutParams lp = dialog.getWindow().getAttributes();
                lp.width = (int)(display.getWidth());
                //(lp).height=(int)dialogview.getHeight();//设置宽度
                dialog.getWindow().setAttributes(lp);

##弹出dialog动画
####MyDialog

public class MyDialog extends Dialog {
    private Window window = null;

    public MyDialog(Context context)
    {
        super(context);
    }
    //这个构造函数可以设置dialog的属性
    public MyDialog(Context context, int themeResId) {
        super(context, themeResId);
    }

    public void showDialog(int layoutResID, int x, int y){
        setContentView(layoutResID);

        windowDeploy(x, y);

        //设置触摸对话框意外的地方取消对话框
        setCanceledOnTouchOutside(true);
        show();
    }

    //设置窗口显示
    public void windowDeploy(int x, int y){
        window = getWindow(); //得到对话框
        window.setGravity(Gravity.BOTTOM|Gravity.CENTER);
        window.setWindowAnimations(R.style.dialogWindowAnim); //设置窗口弹出动画
        //window.setBackgroundDrawableResource(R.color.vifrification); //设置对话框背景为透明
        WindowManager.LayoutParams wl = window.getAttributes();
        //根据x,y坐标设置窗口需要显示的位置
        wl.x = x; //x小于0左移,大于0右移
        wl.y = y; //y小于0上移,大于0下移
        wl.width=window.getWindowManager().getDefaultDisplay().getWidth();//设置dialog的款
//        wl.width= AppApplication.getApplication().getWallpaperDesiredMinimumWidth();
        wl.height=350;//设置dialog的高
//            wl.alpha = 0.6f; //设置透明度
//            wl.gravity = Gravity.BOTTOM; //设置重力
        window.setAttributes(wl);
    }
}

先在res中创建anim在中创建animator

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <!--<scale-->
        <!--android:interpolator="@android:anim/accelerate_interpolator"-->
        <!--android:fromXScale="1.0"-->
        <!--android:toXScale="1.0"-->
        <!--android:fromYScale="0.0"-->
        <!--android:toYScale="1.0"-->
        <!--android:pivotX="0%"-->
        <!--android:pivotY="100%"-->
        <!--android:fillAfter="false"-->
        <!--android:duration="400"/>-->
    <translate
        android:fromXDelta="800"
        android:toXDelta="0"
        android:duration="400"/>
</set>

然后在styles中添加动画

<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
    </style>
    //dialog的属性
    <style parent="@android:Theme.Dialog" name="NoDialogTitle">
    <item name="android:windowFrame">@null</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowIsFloating">true</item>
    <item name="android:windowContentOverlay">@null</item>
    //设置dialog的背景颜色
        <item name="android:background">#ffffff</item>
    </style>
    //dialog的动画
    <style name="dialogWindowAnim" parent="android:Animation" mce_bogus="1">
        <item name="android:windowEnterAnimation">@anim/animator</item>
    </style>

</resources>

这里写图片描述
如果在new Dialog();时,不加R.style…dialog不会全屏即使你在设置dialog的宽的时候为全屏,因为dialog本身就有一定的属性
如图:
这里写图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
安卓可以通过继承 Dialog 类,自定义底部选择器的样式和内容,然后在 Dialog 中实现底部的效果。以下是一个简单的示例: 1. 首先,在 res/layout 目录下新建一个布局文件(例如:custom_picker_layout.xml),用来定义选择器的样式和内容; 2. 创建一个继承自 Dialog 类的自定义 Dialog 对象(例如:CustomPickerDialog),并在其中实现底部的效果; 3. 在 CustomPickerDialog 中加载布局文件,并设置 Dialog 的宽度和高度,以及的位置(例如:底部居中); 4. 显示 CustomPickerDialog。 示例代码如下: ```java public class CustomPickerDialog extends Dialog { public CustomPickerDialog(Context context) { super(context, R.style.BottomDialogStyle); // 加载自定义布局文件 View view = LayoutInflater.from(context).inflate(R.layout.custom_picker_layout, null); // 设置 Dialog 的内容 setContentView(view); // 设置 Dialog 的属性 Window window = getWindow(); if (window != null) { // 设置 Dialog 的宽度和高度 WindowManager.LayoutParams layoutParams = window.getAttributes(); layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT; layoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT; window.setAttributes(layoutParams); // 设置 Dialog位置(底部居中) window.setGravity(Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL); // 设置 Dialog动画效果 window.setWindowAnimations(R.style.BottomDialogAnimation); } } } ``` 注意:上述示例代码中的 BottomDialogStyle 和 BottomDialogAnimation 分别是自定义Dialog 样式和动画效果,可以根据实际情况替换为对应的样式和动画。另外,底部的选择器也可以使用 PopupWindow 实现,具体实现方式类似。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值