我有一个我在布局中使用的形状。我想在我的活动中以编程方式更改颜色。
<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”属性吗?
答案 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