强文本有一个界面组件“视图”(简单矩形),我们称之为“ my_view”。 ...
View myView = (View) findViewById(R.id.my_view);
... 我想以编程方式为myView创建线性渐变颜色背景。 渐变的两种颜色由经常更改的变量设置。所以我需要找到一种优化的方法。 我尝试这样做:
myView.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener()
{
@Override
public boolean onPreDraw()
{
myView.getViewTreeObserver().removeOnPreDrawListener(this);
int view_height = myView.getHeight();
ShapeDrawable myDrawable = new ShapeDrawable(new RectShape());
myDrawable.getPaint().setShader(new LinearGradient(0, 0, 0, view_height, color1, color2, Shader.TileMode.CLAMP));
myView.setBackgroundDrawable(myDrawable);
return false;
}
});
一切正常。每当Seekbar的进度更改时,都应执行此代码。经过测试,我意识到这是一个非常糟糕的方法。一切都可以正常工作,但是延迟明显。
更新: 问题解决了!最好的方法是创建一个自定义绘图!感谢所有给我提示的论坛成员,尤其是 pskink ,他们给了我最好的建议。
答案 0 :(得分:1)
更改数组中的颜色值
val gradientDrawable = GradientDrawable(
GradientDrawable.Orientation.TOP_BOTTOM,
intArrayOf(Color.parseColor("#008000"),
Color.parseColor("#ADFF2F"))
);
gradientDrawable.cornerRadius = 0f;
//Set Gradient
linearLayout.setBackground(gradientDrawable);
结果
答案 1 :(得分:0)
您可以在XML文件中创建形状并将其用作背景可绘制对象。
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<gradient android:type="linear" android:gradientRadius="10"
android:startColor="#E9E9E9" android:endColor="#D4D4D4" />
</shape>
答案 2 :(得分:0)
您可以这样做,并相应地更改方向和颜色。
public void perform_action(View v)
{
Button btn = (Button) findViewById(R.id.push_button);
//Color.parseColor() method allow us to convert
// a hexadecimal color string to an integer value (int color)
int[] colors = {Color.parseColor("#008000"),Color.parseColor("#ADFF2F")};
//create a new gradient color
GradientDrawable gd = new GradientDrawable(
GradientDrawable.Orientation.TOP_BOTTOM, colors);
gd.setCornerRadius(0f);
//apply the button background to newly created drawable gradient
btn.setBackground(gd);
}
以XML格式
<Button
android:id ="@+id/push_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button Gradient Background"
android:padding="15dp"
android:onClick="perform_action"
/>
答案 3 :(得分:0)
use可以动态选择颜色并像这样使用。
int[] colors = {Color.parseColor("#008000"),Color.parseColor("#ADFF2F")};
//create a new gradient color
GradientDrawable gd = new GradientDrawable(
GradientDrawable.Orientation.TOP_BOTTOM, colors);
gd.setCornerRadius(0f);
//apply the button background to newly created drawable gradient
view.setBackground(gd);