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