2015-06-07 78 views
0

我正在使用CaldroidFragment爲我的應用程序。現在我試圖設置使用特定日期的背景色使用動態顏色在運行時創建一個背景資源android

CaldroidFragment.setBackgroundResourceForDate(int backgroundRes, 
            java.util.Date date); 

函數。現在如果我從xml傳遞資源,比如R.color.blue作爲第一個參數,那麼它可以工作,但是我必須在運行時傳遞動態顏色值作爲背景。我在一個範圍內動態生成顏色(如插值)。現在我正在嘗試getResources()。getColor()函數將我的顏色轉換爲資源。

private static final int COLOR_END = Color.parseColor("#BD4141"); 
private static final int COLOR_START = Color.parseColor("#69A864"); 



mCaldroidFragment.setBackgroundResourceForDate(
         getResources().getColor(getInterPolateColor(2)), 
         new Date()); 


private int getInterPolateColor(int value) { 
      return Utility.interpolateColor(COLOR_START, COLOR_END, value/(float) 15); 
} 



public static int interpolateColor(final int startColor, final int endColor, final float proportion) { 
      final float[] hsva = new float[3]; 
      final float[] hsvb = new float[3]; 
      Color.colorToHSV(startColor, hsva); 
      Color.colorToHSV(endColor, hsvb); 
      for (int i = 0; i < 3; i++) { 
       hsvb[i] = interpolate(hsva[i], hsvb[i], proportion); 
      } 
      return Color.HSVToColor(hsvb); 
} 



private static float interpolate(final float a, final float b, final float proportion) { 
      return (a + ((b - a) * proportion)); 
} 

但它顯示了以下錯誤

android.content.res.Resources$NotFoundException: Resource ID #0xff79ab60 
      at android.content.res.Resources.getValue(Resources.java:1123) 
      at android.content.res.Resources.getColor(Resources.java:805) 

現在是有可能從顏色值會像R.color.xxx,或解決我的問題的任何解決方案創建的背景資源。

回答

1

據我所知,目前還沒有辦法動態更換的R項目(後R.color,R.id等)。這些資源在構建時從您的xml(和其他靜態)資源進行編譯。

此外,根據CaldroidFragment GitHub的readme,它確實像你預計在XML來定義自定義顏色:

要使用這些方法,你應該在color.xml定義顏色和 背景繪製的文件夾:

caldroidFragment.setBackgroundResourceForDate(R.color.blue, blueDate); 
caldroidFragment.setBackgroundResourceForDate(R.color.green, greenDate); 

所以,簡單的答案似乎是,不,你不能動態地設置你的顏色。

我唯一的建議是,如果你能想出一種方法來覆蓋/重載setBackgroundResourceForDate(),最好傳遞一個可繪製的資源而不是背景的顏色。這樣,您將可以在保持相同的R.id和名稱的同時動態調整drawable(顏色,圖像,形狀等)。

+0

setBackgroundResourceForDate()不能在我的情況下獲取錯誤 –

1

閱讀源代碼,我不認爲還有其他選項,然後改變源代碼支持的色彩不僅資源/

相關問題