Android模态层的实现

本文介绍了如何在Android中实现模态层,包括获取控件坐标、动态设置边距以及利用MarginLayoutParams调整布局。主要步骤涉及获取状态栏高度、控件的X、Y坐标以及动态摆放控件的位置。此外,还讲解了如何在代码中设置布局参数和获取屏幕尺寸。
摘要由CSDN通过智能技术生成

实现思路:

1. 新建一个类,放几张图片,每点击一次销毁当前图片和实现跳转。

2. 做几个图标,先获取要覆盖图标的坐标位置,然后把要覆盖的图标动态覆盖上去。

3. 主要代码:

@Override
  public void onWindowFocusChanged(boolean hasFocus) {
      super.onWindowFocusChanged(hasFocus);

      Rect outRect = new Rect();
      getWindow().getDecorView().getWindowVisibleDisplayFrame(outRect);
      if (image_gongying != null) {
          int[] location = new int[2];
          image_gongying.getLocationOnScreen(location);
          int x1 = location[0];
          int y1 = location[1];

          int dx = (gongyingm.getWidth() - image_gongying.getWidth()) / 2;
          int dy = (gongyingm.getHeight() - image_gongying.getHeight()) / 2;

          ViewGroup.MarginLayoutParams margin = new ViewGroup.MarginLayoutParams(gongyingm.getLayoutParams());
          margin.setMargins(x1 - dx, y1 - outRect.top - dy, 0, 0);
          RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(margin);
          gongyingm.setLayoutParams(layoutParams);
          gongyingm.setVisibility(View.VISIBLE);

          ViewGroup.MarginLayoutParams margin2 = new ViewGroup.MarginLayoutParams(maijia.getLayoutParams());
          margin2.setMargins(x1+gongyingm.getWidth(), y1 - gongyingm.getHeight() - maijia.getHeight()/2, 0, 0);
          RelativeLayout.LayoutParams layoutParams2 = new RelativeLayout.LayoutParams(margin2);
          maijia.setLayoutParams(layoutParams2);
          maijia.setVisibility(View.VISIBLE);


          ViewGroup.MarginLayoutParams margin3 = new ViewGroup.MarginLayoutParams(xiayibu1.getLayoutParams());
          margin3.setMargins((ScreenUtils.getScreenWidth(this)-xiayibu1.getWidth())/2 , y1 + (int)(gongyingm.getHeight()*1.5), 0, 0);
          RelativeLayout.LayoutParams layoutParams3 = new RelativeLayout.LayoutParams(margin3);
          xiayibu1.setLayoutParams(layoutParams3);
          xiayibu1.setVisibility(View.VISIBLE);
          xiayibu1.setOnClickListener(new OnClickListener() {
              @Override
              public void onClick(View v) {
                  gongyingm.setVisibility(View.INVISIBLE);
                  maijia.setVisibility(View.INVISIBLE);
                  xiayibu1.setVisibility(View.INVISIBL

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Android可以通过使用Dialog或者BottomSheet来实现模态框。 1. 使用Dialog实现模态框: 在Android中,Dialog是一个用于显示视图的弹出式窗口。可以使用AlertDialog或者自定义布局来创建Dialog。AlertDialog是一个预定义的对话框,它提供了几个按钮和默认的布局,而自定义Dialog可以包含一个用户定义的布局。 下面是使用AlertDialog实现模态框的示例代码: ```java AlertDialog.Builder builder = new AlertDialog.Builder(context); builder.setTitle("Title"); builder.setMessage("Message"); builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { // 点击OK按钮时执行的代码 } }); builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { // 点击Cancel按钮时执行的代码 } }); AlertDialog dialog = builder.create(); dialog.show(); ``` 2. 使用BottomSheet实现模态框: BottomSheet是Android 5.0引入的一个新控件,它是一个可以从屏幕底部弹出的视图。可以使用BottomSheetDialog或者BottomSheetBehavior来创建BottomSheet。 下面是使用BottomSheetDialog实现模态框的示例代码: ```java BottomSheetDialog dialog = new BottomSheetDialog(context); View view = LayoutInflater.from(context).inflate(R.layout.bottom_sheet_layout, null); dialog.setContentView(view); dialog.show(); ``` 其中,bottom_sheet_layout是自定义的布局文件,可以在其中添加需要显示的内容。 希望能够帮助到你!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhwadezh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值