如何以编程方式更改渐变的startColor属性 - Android

时间:2011-01-21 18:39:29

标签: android shape

我有一个我在布局中使用的形状。我想在我的活动中以编程方式更改颜色。

<shape android:id="@+id/shape1" xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> 
   <gradient android:id="@+id/gradient1"
        android:startColor="@color/widget_header"
        android:endColor="#0000CC" 
        android:angle="270"/> 

   <corners android:bottomRightRadius="1dp"
        android:bottomLeftRadius="1dp" 
        android:topLeftRadius="7dp"
        android:topRightRadius="7dp"/> 
</shape>

有什么办法可以改变我的Activity中的“startColor”和“endColor”属性吗?

2 个答案:

答案 0 :(得分:2)

检查this,还有相当多的额外代码,但它似乎演示了如何在代码中创建可绘制和渐变可绘制...查看第159行。您可能不需要创建形状XML,因为您可能需要以预定方式创建形状等

答案 1 :(得分:0)

科特林代码变化startColor&存在梯度绘制文件的ENDCOLOR: 样本GradientDrawable文件(gradient_header.xml):

<androidx.constraintlayout.widget.ConstraintLayout 
       android:layout_width="match_parent"
       android:background="@drawable/gradient_header"
       android:layout_height="80dp"
       android:id="@+id/rootConstraintLayout">

以及将其用作XML布局文件(ly_custom_header.xml)中的背景的View(ViewGroup):

  val layoutFile = View.inflate(this, R.layout.ly_custom_header, null)

1-如果布局XML(文件:ly_custom_header)不在当前活动/片段上下文中,则对其进行充气:

   val  rootConstraintLayout= layoutFile.findViewById< ViewGroup  >(R.id.root_constraintlayout_ly_custom_header)

*如果视图是当前活动内只是简单地使用它的ID而不是膨胀的。

2-如果施加的梯度到ViewwGroup对象的背景(ConstraintLayout,LinearLayout中,...),访问像这样从膨胀的XML,对于样品,如果我们的布局是ConstraintLayout:

 var drawable  = rootConstraintLayout.background as GradientDrawable

3-创建gradientDrawable对象&获得当前施加的梯度绘制:

   drawable.colors = intArrayOf(   startColor , endColor  )

4-更改/设置开始和结束颜色:

rootConstraintLayout.background =  drawable

5-将dawable应用于视图(此处为ConstraintLayout):

myvar
  • 如果你的颜色是六,所以你可以用它来把它们转换:

    变种startColor = Color.parseColor( “#92A8F1”) 或简单地使用您的颜色:

    var startColor = Color.BLUE