当前位置: 首页 > 知识库问答 >
问题:

clipToOutline带角Radii带背景

尤茂材
2023-03-14

有时在我的实践中,我想圆视图的背景角。通常我会用这样的(@drawable/bg_rounded)

<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <corners android:radius="16dp"/>
</shape>

但有时我只需要舍入一个角度,并以编程方式完成

我创建了一个测试项目来显示问题。activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="100dp"
    android:layout_margin="20dp"
    android:background="@drawable/bg_rounded">

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/purple_200"/>

</FrameLayout>

主活动类可能类似于

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        val container = findViewById<FrameLayout>(R.id.container)
        container.clipToOutline = true
        val background: GradientDrawable =
            container.background.mutate() as? GradientDrawable ?: return
        background.cornerRadii = floatArrayOf(
            20F, 20F, 20F, 20F,
            20F, 20F, 20F, 20F
        )
    }
}

但是意想不到的行为发生了-角落不是圆的点击查看图片

如果我使用背景。转弯半径:可以预测

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        val container = findViewById<FrameLayout>(R.id.container)
        container.clipToOutline = true
        val background: GradientDrawable =
            container.background.mutate() as? GradientDrawable ?: return
        background.cornerRadius = 20F
//        background.cornerRadii = floatArrayOf(
//            20F, 20F, 20F, 20F,
//            20F, 20F, 20F, 20F
//        )
    }
}

点击查看图片

所以我的问题是:我应该用什么来实现不同圆角半径的动态调整

共有1个答案

申屠涛
2023-03-14

如果我使用背景。转弯半径:可以预测

这是因为剪裁只支持矩形、圆形或圆形矩形。

当您在后台使用<code>时。cornerRadius使用<code>RoundRect它使用<code>路径才支持路径剪裁。检查大纲文档。

不能使用可变角半径,但可以通过使用<code>ViewOutlineProvider

 类似资料:
  • 我实际上正在学习Angular2,但我遇到了一个...CSS问题o_O我曾搜索过一个类似的问题,但没有任何成功,现在开始: 我在中有一个标记元素 我在div中设置了并使用来适应,但似乎根本不起作用,图片不适合div。 我很困惑因为这是第一次发生在我身上 请参阅:我使用styleUrls在组件中注入css规则 代码 谢谢!

  • 我试着让两个div相邻,它们之间有一个对角线空间。我在stackoverflow上看到过多个关于对角线div的教程,但它们都是通过为带有纯色的div使用两个边框并使用它们创建的对角线来实现的。但我想要图片/背景图像,而不是纯色。甚至可能还有其他内容,比如在对角线下的文本。当使用边框时,这是不可能的,因为边框在div之外。(floatright隐藏溢出或其他内容。) 这里有人能给我一个提示如何实现这

  • 问题内容: 如何在文本保持不透明的同时使跨浏览器(包括Internet Explorer 6)的背景透明? 我需要在不使用jQuery等任何库的情况下进行此操作。(但是,如果您知道可以做到这一点的库,那么我很想知道,因此我可以看看他们的代码)。 问题答案: 使用rgba! 除此之外,您还必须声明IE Web浏览器,最好通过条件注释或类似注释进行声明!

  • 我有一个Spring Boot项目,使用Jersey作为我的REST服务,并使用AngularJS进行我的前端开发。当我在不使用任何控制器的情况下运行它并转到index.html(位于resource/statig/index.html中)时,它运行得很好。当我添加一个控制器时,它呈现给出字符串“index.html”作为输出。Spring Boot配置: 球衣配置: 控制器类:

  • 我正在使用Azure广告与隐式流量与一个角4应用程序。我的NG4应用程序使用PathLocationStrategy路由,这样它就可以利用干净的URL。我的AAD身份验证请求如下所示: https://login.microsoftonline.com/xxxxx/oauth2/authorize?client_id=xxxx&response_type=id_token&redirect_uri

  • 我有一个奇怪的问题,老实说,我不知道该怎么做。 我有一个背景图像的盒子。在背景图片上,我有很多带有背景颜色和文字的框。我希望每个框中的文本的颜色是透明的,所以颜色将是文本上面的背景图像的一部分。 这里有一个例子:http://jsfiddle.net/wjdwohdd/5/ 它应该是一个图像,而不是绿色背景。 如果我设置颜色:透明,文本的颜色变成红色,我不确定它是否可以作为背景图片。 编辑:我更新