1

我想为我的android应用创建自定义视图,该应用具有更改其背景色“渐变”的功能。如何动态更改视图的背景颜色梯度

这样的事情,但可以向左移动中间的手柄,右使用代码
THIS

TO THIS


美中不足的是,我希望有一个功能类似的观点:

changeBackgroundGradient(ratio, startColour, centreColour, endColour); 

比率(具有0〜1的值),由式 leftValue/rightValue确定所述渐变的形状给定

startColour,centreColour和endColour是其中的梯度由

颜色我将如何使这个功能?


问候

回答

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了更多的选择应用渐变颜色。

+0

对我不起作用 感谢您的艰难 – Virus

+0

获取错误或什么? – androidnoobdev

+0

我需要一个自定义方向(形状) – Virus

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());

+0

我已经有了颜色,不需要生成随机 我只是想改变形状(坡度曲线) 感谢您试用强硬 – Virus