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

如何在Android静态编程语言中根据视图的宽度应用圆角

邵兴怀
2023-03-14

我正在制作一个自定义的进度条,如下图所示:

基本上,我创建了一个可绘制的xml背景文件:

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid
        android:color="@color/jungleGreen"/>
    <corners
        android:bottomLeftRadius="40dp"
        android:topLeftRadius="40dp"/>
</shape>

然后我将其应用于我正在使用的视图:

<View
            android:id="@+id/progress_bar_placeholder_view"
            android:layout_width="match_parent"
            android:layout_height="30dp"
            android:layout_marginEnd="45dp"
            android:background="@drawable/background_filled_patronage_progressbar"
            app:layout_constraintTop_toTopOf="parent"/>

这完全没问题,我可以实现场景1和2,但是当栏越来越接近终点时,我如何以编程方式设置视图右上角和右下角的圆角,直到它看起来像照片3中的样子?

谢谢

共有2个答案

端木高邈
2023-03-14

Madhav的解决方案适合我,所以基本上我需要传入视图的宽度,然后计算角半径数并将其放入gradientDrawable,如下所示:

    private fun setupGraphBackground(view: View, graphWidth: Int) {
            val gradientDrawable = GradientDrawable()
            gradientDrawable.shape = GradientDrawable.RECTANGLE
            gradientDrawable.setColor(resources.getColor(R.color.jungleGreen))
            gradientDrawable.setStroke(0, null)
            gradientDrawable.cornerRadii = floatArrayOf(45f, 45f, 
                graphWidth * calculationRules, graphWidth * calculationRules, 
                graphWidth * calculationRules, graphWidth * calculationRules, 
                45f, 45f)
            view.background = gradientDrawable
        }

其中as calculationRules是我想要的规则,这样我可以得到右上角和右下角的正确半径。

茅桐
2023-03-14

试试这个

    public static void customView(View v, int backgroundColor, int borderColor)
 {
            GradientDrawable shape = new GradientDrawable();
            shape.setShape(GradientDrawable.RECTANGLE);
            shape.setCornerRadii(new float[] { 8, 8, 8, 8, 0, 0, 0, 0 });
            shape.setColor(backgroundColor);
            shape.setStroke(3, borderColor);
            v.setBackground(shape);
        }

来源:如何以编程方式创建android形状背景?

 类似资料:
  • 我在静态编程语言中遇到了一件非常奇怪的事情。我有 作为变量,我应该能够重新分配他的值,但是当我这样做时 它给了我错误 无法重新分配Val 最奇怪的是,我用了几个星期这个代码,它总是有效的。当我更新到API 29时,它今天停止工作 这是我的

  • 我试图用OkHttp和Cucumber在静态编程语言中设置一个Spring启动项目,并且在运行Cucumber任务时遇到以下错误。如何修复? 还有build gradle kts片段 我看到了这个错误https://github.com/square/okio/issues/647看起来可能是它,并修复了这个build.gradle,我如何将其翻译为kotlinbuild.gradle.kts?

  • 所以我希望我的应用程序在一定的时间间隔内执行操作。在做了一点研究后,我在stackoverflow上找到了一些答案,它使我找到了这个链接,该链接称为固定RateTimer:这是该页面中的第一个示例 当我添加这段代码时,我得到了一个错误。 “表达式'fixedRateTimer'不能作为函数调用。找不到函数'invoke()'变量'fixedRateTimer'必须初始化” 我做了更多的研究并引进了

  • 我试图转换一些使用Jackson的@JsonSubTypes注释来管理多态性的Java代码。 以下是可用的Java代码: 以下是我认为等效的Kotlin代码: 但我在三行“JsonSubTypes.Type”中的每一行都会出现以下错误: 知道吗?

  • 是否可以在中的class中添加一个新的静态方法?通常,由于Kotlin Extensions,这样的事情在Kotlin中是可能的。 我已经尝试在一个名为的文件中执行以下操作: 但<code>数学。无法解析同伴。。。