圆角   您所在的位置:网站首页 汉城是中国起的名字吗为什么 圆角  

圆角  

2023-10-04 02:58| 来源: 网络整理| 查看: 265

从 Android 12(API 级别 31)开始,您可以使用 RoundedCorner 和 WindowInsets.getRoundedCorner(int position) 来设置圆角的半径和中心点。借助这些 API,您的应用可以避免界面元素在带有圆角的屏幕上被截断。该框架还提供了 getPrivacyIndicatorBounds() API,它会返回任何可见麦克风和摄像头指示标志的有界矩形。

在您的应用中实现这些 API 时,它们对具有非圆角屏幕的设备没有影响。

图片显示了一个圆角,并标注了半径和中心点 图 1:标注了半径和中心点的圆角

如需实现此功能,请相对于应用的边界通过 WindowInsets.getRoundedCorner(int position) 获取 RoundedCorner 信息。如果应用未占据整个屏幕,则该 API 通过让圆角的中心点基于应用的窗口边界来应用圆角。

以下代码段展示了一个简单的示例,说明了一个应用通过根据来自 RoundedCorner 的信息设置视图的外边距来避免界面截断。在本例中,它是右上角的圆角。

Kotlin // Get the top-right rounded corner from WindowInsets. val insets = rootWindowInsets val topRight = insets.getRoundedCorner(RoundedCorner.POSITION_TOP_RIGHT) ?: return // Get the location of the close button in window coordinates. val location = IntArray(2) closeButton!!.getLocationInWindow(location) val buttonRightInWindow = location[0] + closeButton.width val buttonTopInWindow = location[1] // Find the point on the quarter circle with 45 degree angle. val offset = (topRight.radius * Math.sin(Math.toRadians(45.0))).toInt() val topBoundary = topRight.center.y - offset val rightBoundary = topRight.center.x + offset // Check whether the close button exceeds the boundary. if (buttonRightInWindow < rightBoundary topBoundary) { return } // Set the margin to avoid truncating. val parentLocation = IntArray(2) getLocationInWindow(parentLocation) val lp = closeButton.layoutParams as FrameLayout.LayoutParams lp.rightMargin = Math.max(buttonRightInWindow - rightBoundary, 0) lp.topMargin = Math.max(topBoundary - buttonTopInWindow, 0) closeButton.layoutParams = lp Java // Get the top-right rounded corner from WindowInsets. final WindowInsets insets = getRootWindowInsets(); final RoundedCorner topRight = insets.getRoundedCorner(POSITION_TOP_RIGHT); if (topRight == null) { return; } // Get the location of the close button in window coordinates. int [] location = new int[2]; closeButton.getLocationInWindow(location); final int buttonRightInWindow = location[0] + closeButton.getWidth(); final int buttonTopInWindow = location[1]; // Find the point on the quarter circle with a 45 degree angle. final int offset = (int) (topRight.getRadius() * Math.sin(Math.toRadians(45))); final int topBoundary = topRight.getCenter().y - offset; final int rightBoundary = topRight.getCenter().x + offset; // Check whether the close button exceeds the boundary. if (buttonRightInWindow < rightBoundary topBoundary) { return; } // Set the margin to avoid truncating. int [] parentLocation = new int[2]; getLocationInWindow(parentLocation); FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams) closeButton.getLayoutParams(); lp.rightMargin = Math.max(buttonRightInWindow - rightBoundary, 0); lp.topMargin = Math.max(topBoundary - buttonTopInWindow, 0); closeButton.setLayoutParams(lp);


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有