2016-08-19 20 views
1

我想以編程方式將1.0浮點值映射到RGB顏色。下面的程序對我來說工作得很好,但它取得了浮點值並與某個範圍進行比較,並返回硬編碼的RGB值。如何根據某些變量更改RGB值? (值映射顏色)

取而代之,我想根據浮點值更改RGB值。在我的邏輯中,當然我得到1.1到1.9的相同顏色,但是我希望動態地改變基於1.0到5.0的RGB。

如果我嘗試將R,G,B移位,但無法做到這一點。

btn3.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      String test = "1.8,-0.9,3,4.9,2.3"; 
      String[] sep = test.split(",");  //seperating data on "," 

      et0.setText(sep[0]); 
      float f0 = Float.parseFloat(sep[0]); // changing string to float to compare in checkdata(); 
      et0.setBackgroundColor(Color.parseColor(checkdata(f0))); 

      et1.setText(sep[1]); 
      float f1 = Float.parseFloat(sep[1]); 

      et1.setBackgroundColor(Color.parseColor(checkdata(f1))); 

      et2.setText(sep[2]); 
      float f2 = Float.parseFloat(sep[2]); 
      et2.setBackgroundColor(Color.parseColor(checkdata(f2))); 

      et3.setText(sep[3]); 
      float f3 = Float.parseFloat(sep[3]); 
      et3.setBackgroundColor(Color.parseColor(checkdata(f3))); 

      et4.setText(sep[4]); 
      float f4 = Float.parseFloat(sep[4]); 
      et4.setBackgroundColor(Color.parseColor(checkdata(f4))); 
     } 
    }); 
} 

public String checkdata(float f) { 

    if (f<1) { 

     return "#000000" ; 
    } 
    if (f >=1 && f<2) { 

     return "#febebb" ; 
    } 
    if (f >= 2 && f<3) { 
     return "#fe8f8b" ; 
    } 
    if (f >=3 && f<4) { 
     return "#fe5953" ; 
    } 
    if (f >=4 && f<5) { 
     return "#ff0900" ; 
    } 
    else { 
     return "#000000"; 
    } 
} 

任何幫助?

回答

0

對於那些誰感興趣的是這個問題!

我只使用了RGB(HEX)的藍色(與字符串分離)並將B的Hex轉換爲整數。然後我用梯度formula。在此浮點值之後,我將其舍入爲整數並轉換爲十六進制值。整個Hex - > Int - > Float - > Int - > Hex轉換僅在Blue上完成。現在,我將B連接到RG,並根據變量值更新RGB。

public String checkdata(float f) { 
 

 
     String Picked = ec1.getText().toString(); 
 
     Log.i("Color Picked(Hex)",Picked); 
 
     
 
     String gradSelect = ec1.getText().toString().substring(5);  // picking B from #RRGGBB which is 5th element 
 
     Log.i("Seperated Single(Hex)",gradSelect); 
 
     int intGrad = Integer.parseInt(gradSelect,16); //Converting Blue to Integer equivalent 
 
     Log.i("Converted to Int", ""+intGrad); 
 

 
     float float2Grad = f*255/5; // Mapping Input f's (0 to 5) values to 0 to 255 color values 
 
     // float float2Grad = (intGrad - f)/ (6-f);  //another formula, but range will not be full 0 to 255 integers of color 
 
     Log.i("Float2Gradient", ""+float2Grad); 
 

 
     int rounded_i = Math.round(float2Grad);        //float to int 
 
     Log.i("Rounded Gradient(Int)", ""+rounded_i); 
 

 
     String updatedBlueHex = Integer.toHexString(rounded_i);    // padding by O for integer values < 15 (Hex 0 to F), so that RRGGB can be avoided and RRGGBB 
 
     if (updatedBlueHex.length() == 1) { 
 
      updatedBlueHex = "0".concat(updatedBlueHex);      // if its F then It will give 0F and hence RRGGBB formate maintained 
 
           } 
 
     Log.i("Updated Single(Hex)",updatedBlueHex); 
 

 

 

 
     String redGreen = Picked.substring(1,5);         // RRGG 
 
     Log.i("Untouched RG(Hex)", redGreen); 
 

 
     String Returning = redGreen.concat(updatedBlueHex);        // RRGG + Bb = RRGGBB 
 
     Log.i("Returned String(Hex)",Returning); 
 

 
     return "#"+Returning; 
 

 
    }

這爲我工作!謝謝。評論如果您有任何問題

0

你想漸變嗎?如果是,https://stackoverflow.com/a/33466114/2061650幫助您

if (f >=1 && f<2) { 

     return "#febebb" ; 
    } 
    if (f >= 2 && f<3) { 
     return "#fe8f8b" ; 
    } 

- >

if (f >=1.5 && f<2.5) { 
    c1 = C.pc("#febebb"); 
    c2 = C.pc("#fe8f8b"); 
    return evaluator.evaluate((f-1.5) /(2.5-1.5), c1, c2) 

} 

et4.setBackgroundColor(Color.parseColor(checkdata(f4))); 

- >

et4.setBackgroundColor(checkdata(f4)); 
+0

是的,我正在尋找一個漸變。我在edittext中有25個不同的值,它應該代表基於edittxt –

+0

中的值的背景顏色,請閱讀更新後的答案。全清? –

+0

我認爲(f-1.5)/(2.5-1.5)是雙倍的,但是需要的是浮動。並評估返回一個對象不是整數。但會再次檢查。 –