【问题标题】:Kotlin programmatically Drawable - change Gradient colors (startColor, centerColor, endColor)Kotlin 以编程方式可绘制 - 更改渐变颜色(startColor、centerColor、endColor)
【发布时间】:2021-11-26 17:03:36
【问题描述】:

请帮我翻译成程序化的progressDrawable。 我需要三种颜色:

        <gradient
            android:id="@+id/progressCompensationColor"
            android:startColor="@color/colorCompensationEasyGreen"
            android:centerColor="@color/colorCompensationMediumGreen"
            android:endColor="@color/colorCompensationHardGreen"
            android:centerX="0.3"
            android:type="sweep" />

MainDashboardFragment.kt

    var colorEasy = ContextCompat.getColor(activity as MainActivity, R.color.colorProgressBlueLight)
    var colorMedium = ContextCompat.getColor(activity as MainActivity, R.color.colorProgressBlueLight)
    var colorHard = ContextCompat.getColor(activity as MainActivity, R.color.colorProgressBlueLight)
    if (value <= 33.0) {
        colorEasy = ContextCompat.getColor(activity as MainActivity, R.color.colorRedEasy)
        colorMedium = ContextCompat.getColor(activity as MainActivity, R.color.colorRedMedium)
        colorHard = ContextCompat.getColor(activity as MainActivity, R.color.colorRedHard)
    } else if (value >= 66.0) {
        colorEasy = ContextCompat.getColor(activity as MainActivity, R.color.colorGreenEasy)
        colorMedium = ContextCompat.getColor(activity as MainActivity, R.color.colorGreenMedium)
        colorHard = ContextCompat.getColor(activity as MainActivity, R.color.colorGreenHard)
    }val customProgessBar = view.findViewById<ProgressBar>(R.id.progressCompensationScore)

fragment_main_dashboard_paired.xml

                <com.mysasy.mysasymobile.ui.CustomProgressBar
                android:id="@+id/progressCompensationScore"
                style="?android:attr/progressBarStyleHorizontal"
                android:layout_width="150dp"
                android:layout_height="150dp"
                android:background="@drawable/background_progress_bar_circular_blue"
                android:indeterminate="false"
                android:min="50"
                android:max="150"
                android:progress="75"
                android:progressDrawable="@drawable/progress_circle" />

progress_circle.xml

<item>
    <shape
        android:innerRadiusRatio="2.15"
        android:shape="ring"
        android:thicknessRatio="50.0" >
        <gradient
            android:id="@+id/progressCompensationColor"
            android:startColor="@color/colorCompensationEasyGreen"
            android:centerColor="@color/colorCompensationMediumGreen"
            android:endColor="@color/colorCompensationHardGreen"
            android:centerX="0.3"
            android:type="sweep" />
    </shape>
</item>

实施?这是正确的程序吗?

        val customProgessBar = view.findViewById<ProgressBar>(R.id.progressCompensationScore)
    val draw = createProgressBar(Color.RED, Color.GREEN, Color.BLUE)
    customProgessBar.progressDrawable = draw

我的灵感:Gradient Circular Progress Bar

【问题讨论】:

    标签: kotlin gradient drawable gradientdrawable


    【解决方案1】:

    你需要GradientDrawable

    GradientDrawable drawable = new GradientDrawable();
    drawable.setInnerRadiusRatio(2.15F);
    drawable.setThicknessRatio(50F);
    drawable.setShape(GradientDrawable.RING);
    drawable.setColors(new int[]{colorStart, colorCenter, colorEnd});
    drawable.setGradientCenter(0.3F, 0F);
    drawable.setGradientType(GradientDrawable.SWEEP_GRADIENT);
    
    // for demo displaying
    drawable.setLevel(10000);
    

    或者查看this,一个简单的 kotlin ext 用于 dsl android shape 资源。

    【讨论】:

    • ok.thx.这是正确的程序吗? val customProgessBar = view.findViewById(R.id.progressCompensationScore) val draw = createProgressBar(Color.RED, Color.GREEN, Color.BLUE) customProgessBar.progressDrawable = draw
    猜你喜欢
    • 2012-07-07
    • 1970-01-01
    • 2014-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多