如何以编程方式为视图创建渐变颜色背景?

时间:2019-01-09 07:58:18

标签: java android

强文本有一个界面组件“视图”(简单矩形),我们称之为“ 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 ,他们给了我最好的建议。

4 个答案:

答案 0 :(得分:1)

使用Kotlin,您只需2行即可完成

更改数组中的颜色值

              val gradientDrawable = GradientDrawable(
                    GradientDrawable.Orientation.TOP_BOTTOM,
                    intArrayOf(Color.parseColor("#008000"),
                               Color.parseColor("#ADFF2F"))
                );
                gradientDrawable.cornerRadius = 0f;

               //Set Gradient
               linearLayout.setBackground(gradientDrawable);

结果

enter image description here

答案 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"
 />

herehere是一个示例

答案 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);