如何动态更改视图的背景颜色渐变

时间:2017-06-05 12:43:43

标签: android android-layout android-view android-custom-view android-custom-drawable

我想为我的Android应用程序制作一个自定义视图,它具有更改背景颜色的功能"渐变"。

这样的东西,但中心手柄可以使用代码左右移动
THIS

TO THIS


问题是,我想要一个类似于视图中的函数:

changeBackgroundGradient(ratio, startColour, centreColour, endColour);

比率(值介于0到1之间)由公式给出 leftValue / rightValue 确定渐变的形状

startColour,centreColour和endColour 是渐变组成的颜色

我将如何制作此功能?


此致

2 个答案:

答案 0 :(得分:0)

您可以尝试下面的代码,因为这对我来说是动态更改我的工具栏颜色

private void setGradientColor(View header)
{
    String primaryColor = "#f4f3f2"; // any color code
    String primaryDarkColor = "#000000";

    GradientDrawable gd = new GradientDrawable (
    GradientDrawable.Orientation.BR_TL, // check below link for this you can change this value 
    new int[] { 
        Color.parseColor(primaryColor),
        Color.parseColor(primaryDarkColor)
        }
    );

    gd.setCornerRadius(1f);

    header.setBackground(gd);
}

<强>更新

检查this以获取更多选项以在视图中应用渐变色。

答案 1 :(得分:0)

  

您可以尝试以下功能。在活动文件中添加这些功能。

       private Drawable getGradientDrawable()
        {
            GradientDrawable gradient = new GradientDrawable();
            gradient.setGradientType(GradientDrawable.LINEAR_GRADIENT);
            gradient.setColors(new int[]{getRandomHSVColor(), getRandomHSVColor()});
            return gradient;
        }


        protected int getRandomHSVColor(){
            // Generate a random hue value between 0 to 360
            int hue = mRandom.nextInt(361);
            // We make the color depth full
            float saturation = 1.0f;
            // We make a full bright color
            float value = 1.0f;
            // We avoid color transparency
            int alpha = 255;
            // Finally, generate the color
            int color = Color.HSVToColor(alpha, new float[]{hue, saturation, value});
            // Return the color
            return color;
        }
        // Custom method to get a lighter color
        protected int getLighterColor(int color){
            float[] hsv = new float[3];
            Color.colorToHSV(color,hsv);
            hsv[2] = 0.2f + 0.8f * hsv[2];
            return Color.HSVToColor(hsv);
        }

        // Custom method to get reverse color
        protected int getReverseColor(int color){
            float[] hsv = new float[3];
            Color.RGBToHSV(
                    Color.red(color), // Red value
                    Color.green(color), // Green value
                    Color.blue(color), // Blue value
                    hsv
            );
            hsv[0] = (hsv[0] + 180) % 360;
            return Color.HSVToColor(hsv);
        }
  

比使用此功能如下:

     

<强> your_layout_name..setBackground(getGradientDrawable());