gpt4 book ai didi

Android - 如何以编程方式定义 ShapeDrawables?

转载 作者:IT老高 更新时间:2023-10-28 22:03:09 25 4
gpt4 key购买 nike

我想要实现的是使用其中包含几个图层的 Drawable,但在运行时控制一些值,例如渐变的 startColor。这是我在 my_layered_shape.xml 中的内容:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item>
<shape android:shape="rectangle">
<stroke android:width="1dp" android:color="#FF000000" />
<solid android:color="#FFFFFFFF" />
</shape>
</item>
<item android:top="1dp" android:bottom="1dp">
<shape android:shape="rectangle">
<stroke android:width="1dp" android:color="#FF000000" />
<gradient
android:startColor="#FFFFFFFF"
android:centerColor="#FFFFFF88"
android:endColor="#FFFFFFFF"
android:gradientRadius="250"
android:centerX="1"
android:centerY="0"
android:angle="315"
/>
</shape>
</item>
</layer-list>

如果我使用 mMyImageView.setBackgroundResource(R.drawable.my_layered_shape) 它可以工作。如果必须,我不介意拆分 xml,或者只要有办法获得各种颜色值,就可以通过编程方式完成整个工作。我要以编程方式提出的概念(即我在代码中与此 xml 相同的最佳方法)是:

Drawable[] layers = new Drawable[2];

ShapeDrawable sd1 = new ShapeDrawable(new RectShape());
sd1.getPaint().setColor(0xFFFFFFFF);
sd1.getPaint().setStyle(Style.STROKE);
sd1.getPaint().setStrokeWidth(1);
// sd1.getPaint().somehow_set_stroke_color?

ShapeDrawable sd2 = new ShapeDrawable(new RectShape());
sd2.getPaint().setColor(0xFF000000);
sd2.getPaint().setStyle(Style.STROKE);
// sd2.getPaint().somehow_set_stroke_color?
// sd2.getPaint().somehow_set_gradient_params?

layers[0] = sd1;
layers[1] = sd2;
LayerDrawable composite = new LayerDrawable(layers);
mMyImageView.setBackgroundDrawable(composite);

谢谢。

最佳答案

这似乎不适用于 ShapeDrawable,但看看我的 GradientDrawable 示例:

GradientDrawable gd = new GradientDrawable(Orientation.BOTTOM_TOP, new int[]{Color.RED, Color.GREEN});
gd.setStroke(10, Color.BLUE);

您可能还需要以下方法:

gd.setGradientCenter(float x, float y);
gd.setGradientRadius(float gradientRadius);

关于Android - 如何以编程方式定义 ShapeDrawables?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7150593/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com